evento focusout no funciona con input dinamico en ASP

Estoy dibujando un input de forma dinámica en una tabla con

document.getElementById('agregaDevolucion').innerHTML = 
    "Devolución:<input type='text' name='txtDeposito' id='txtDeposito'/>";

y ese mismo input hace una búsqueda a una BD a través de AJAX con el evento focusout del input, con el código siguiente

$('#txtDeposito').focusout(function(){
    this.value = this.value.toUpperCase();
    var solicitud = $('#idce').val();
    var devolucion = $('#txtDeposito').val();
    alert(devolucion);
    $.post("buscaSolicitud.asp", { solicitud : solicitud, devolucion : devolucion},
    function (data, textStatus, jqXHR) {
        console.log(data);
        var cadena = data.toString();
        console.log(data);
        if(cadena=="OK"){
            $('#btnEnvia').show();
            $('#error').text("Correcto").css({"color":"green"});;
        }else{
            $('#btnEnvia').hide();
            $('#error').text("El número de devolución no coincide con la solicitud").css({"color":"red"});
        }
    });
});

Pero el problema que tengo es que el input que dibujo no lanza el evento focusout ya que al probar mi aplicacion no hace nada, antes de hacer dinamico el input estaba estatico y si funcionaba, no entiendo por que no hace nada

1
задан 30.04.2016, 01:20
4 ответа

Ты можешь использовать addEventListener, чтобы не зависеть jquery. Смотри в JSBIN, как решил бы я проблему: http://jsbin.com/ciwaro/edit?html,js,console,output

Код у меня остался таким:

// Agrega el objeto dinamico
document.getElementById('agregaDevolucion').innerHTML = 
    "Devolución:<input type='text' name='txtDeposito' id='txtDeposito'/>";

// Hago referencia al objeto dinámico
var txtDeposito = document.getElementById('txtDeposito');

// Agrego el listener focusout
txtDeposito.addEventListener('focusout', function() {
  console.log("entro");
});

Также ты был бы должен анализировать, что существует событие onblur, что очень похожий на focusout, код, чтобы добавлять событие, продолжает быть равен, только меняет параметр, назвав addEventListener.

// Agrego el listener blur
txtDeposito.addEventListener('blur', function() {
  console.log("entro");
});
2
ответ дан 24.11.2019, 14:31

Ты можешь использовать метод on() jQuery, что позволяет присоединять события с элементом, и что функционирует начиная с jQuery 1.7. Но ты не хочешь сделать это следующим способом:

$("selector").on("evento", function() { ... });

А делать это уполномоченным способом, а именно: событие не ассоциируется прямо с элементом, но он уполномочивается в предке он будет ассоциироваться с элементом, когда он будет создан. Формат для уполномоченных событий немного различный:

$("ancestro").on("evento", "selector", function() { ... });

Когда ты это делаешь, ты присоединяешь событие уполномоченного способа. То, что ты делаешь, состоит в том, что, когда будут верить в элемент, определенный "селектором" внутри элемента, определенного в "предке", ему будет распределена функция в данное событие. В твоем особенном случае, ты мог бы делать это так:

$("body").on("focusout", "#txtDeposito", function() {

    this.value = this.value.toUpperCase();
    var solicitud = $('#idce').val();
    var devolucion = $('#txtDeposito').val();
    alert(devolucion);
    $.post("buscaSolicitud.asp", { solicitud : solicitud, devolucion : devolucion},
    function (data, textStatus, jqXHR) {
        console.log(data);
        var cadena = data.toString();
        console.log(data);
        if(cadena=="OK"){
            $('#btnEnvia').show();
            $('#error').text("Correcto").css({"color":"green"});;
        }else{
            $('#btnEnvia').hide();
            $('#error').text("El número de devolución no coincide con la solicitud").css({"color":"red"});
        }
    });

});
2
ответ дан 24.11.2019, 14:31

Используй .on() jquery, чтобы присоединять dinamicamente событие

$('#txtDeposito')on("focusout", function(){ ....

jquery on ()

, Чтобы создавать dinamicamente неудар в лунку, использует

$('#agregaDevolucion').html("Devolución:<input type='text' name='txtDeposito' id='txtDeposito'/>");

jquery html ()

1
ответ дан 24.11.2019, 14:31
  • 1
    не также я не функционирую – Ivxn 26.04.2016, 22:04
  • 2
    издайте пример, стоивший, если создавая html используя jquery он применяет событие – Leandro Tuttini 26.04.2016, 22:11

Создай неудар в лунку dinámicamente и создай функцию, которая выполнит событие onfocusout, и создав неудар в лунку, ты это добавляешь сразу, так:

document.getElementById("agregaDevolucion").innerHTML = "Devolución:<input type='text' name='txtDeposito' onfocusout='myFunction(this);' id='txtDeposito'/>";

Так, в момент создания неудара в лунку он останется соединенным немедленно с событием onfocusout, и ты функция была бы должна оставаться такой:

function myFunction(input) {
        input.value = input.value.toUpperCase();
        var solicitud = $('#idce').val();
        //alert(solicitud);
        var devolucion = $('#txtDeposito').val();
        alert(devolucion);
        //....................
}

Я это протестировал, и если я бросаю в себя событие.

1
ответ дан 24.11.2019, 14:31