如何在dinamically加载元素上绑定模糊?

时间:2016-06-17 01:11:47

标签: jquery

所以,我有这个功能来检查.blur触发的CEP(zipcode),这个功能在从控制台触发时效果很好但是在通过外部.js导入时不会运行。这是代码:

$('#inputs').on('blur', '#i11', function(){
    var cep = $("#i11").val().replace(/\D/g, '');
    if (cep != "") {
        var validacep = /^[0-9]{8}$/;
        if(validacep.test(cep)) {
            $.getJSON("//viacep.com.br/ws/"+ cep +"/json/?callback=?", function(dados) {
                if (!("erro" in dados)) {
                    newInput({id: "i13", value: dados.logradouro, type: "hidden"}, '#cacheDB');
                    newInput({id: "i14", value: dados.bairro, type: "hidden"}, '#cacheDB');
                    newInput({id: "i15", value: dados.localidade, type: "hidden"}, '#cacheDB');
                    newInput({id: "i16", value: dados.uf, type: "hidden"}, '#cacheDB');
                 } else {
                    formGrabber("#content", loadSequence($("#pid").val()));
                 }
             });
        }
    }
});

编辑: 嗯......似乎原因是#i11字段是在页面中动态加载的,所以我已经将问题更新为更合适的字段。

编辑2:按照https://stackoverflow.com/a/1207393/5855060上的说明更新了代码 仍然没有工作

2 个答案:

答案 0 :(得分:0)

  1. 添加console.log('Hello world');在第2行,在jQuery(function(){之后看到您的代码正在运行。

  2. 如果您的内容是动态加载的,$("#i11")将返回一个空对象。您可以使用console.log($("#i11"));进行检查。如果是这种情况,您可以将模糊分配给任何内容。相反,如果您动态加载内容,则应在将事件加载到dom之后绑定事件,而不是之前。

  3. 解决方法

    在jQuery中有一个名为.live()的函数,但它被删除而转而支持.on(),其中.blur()是一个快捷方式。从documentation开始,您可以通过将其绑定到document来获得与.live()相同的结果,并使用以下代码:

    $( document ).on( "blur", "#i11", function() { 
        // ...
    }
    

    这称为委派事件。更具体地说,您可以使用容器而不是document,但它必须存在于页面加载中。您可以在documentation of .on()

    中详细了解此委派活动

答案 1 :(得分:0)

所以,我已经解决了这个:https://stackoverflow.com/a/1207393/5855060。无论如何都要留在这里作为参考。

$(function(){
    $('#inputs').on('blur', '#i11', function(){
        alert('funciona')
        var cep = $("#i11").val().replace(/\D/g, '');
        if (cep != "") {
            var validacep = /^[0-9]{8}$/;
            if(validacep.test(cep)) {
                $.getJSON("//viacep.com.br/ws/"+ cep +"/json/?callback=?", function(dados) {
                    if (!("erro" in dados)) {
                        newInput({id: "i13", value: dados.logradouro, type: "hidden"}, '#cacheDB');
                        newInput({id: "i14", value: dados.bairro, type: "hidden"}, '#cacheDB');
                        newInput({id: "i15", value: dados.localidade, type: "hidden"}, '#cacheDB');
                        newInput({id: "i16", value: dados.uf, type: "hidden"}, '#cacheDB');
                     } else {
                        formGrabber("#content", loadSequence($("#pid").val()));
                     }
                 });
            }
        }
    });
});