jquery - 捕获指定元素的负载

时间:2012-05-21 09:24:18

标签: javascript jquery

我想捕获/处理指定项的加载(如果它是动态加载的)。

如果事件是click,它可以正常工作:

$('#articles').on("click",".article",function(eo){
        //...               
    });

这就是我的尝试:

$(document).on("load","input",function(){
    alert(1);
});​

这就是我将如何使用它:

<input type=hidden name='size' value=1>
<select name='size'>
  <option value=0>A4</option>
  <option value=1>A3</option><!--this will be selected, that is indicated with the hidden input-->
</select>

执行此操作的脚本:

$(document).on("load","input",function(e){
    var name = e.attr("name");
    var val = e.val(); 
    if(name!=""&& typeof(e)!="undefined")
    {
       e.parent().find('select[name='+name+']').val(val);               
    }       
});​

如果有可能,我会问某种on()函数,因为手册说它是首选。

4 个答案:

答案 0 :(得分:2)

我建议如下:

$(document).on('DOMNodeInserted', 'input', function(e) {
    console.log($(this));
});

JS Fiddle demo

如果您担心使用未实现DomNodeInserted的浏览器的人的体验,那么您当然可以在元素所在的位置触发带有自定义事件名称的事件。附加到DOM,然后使用on()方法监听 事件:

$(document).on('customEventName', 'input', function(e) {
    console.log($(this));
});

$('#add').click(
    function() {
        var i = $('input').length,
            input = $('<input />',{'id' : 'input_' + i});
        input.appendTo('body').trigger('customEventName');
    });​

JS Fiddle demo


参考文献:

答案 1 :(得分:0)

您可能需要查看jquery的livequery插件:

http://docs.jquery.com/Plugins/livequery

$('input') 
.livequery(function(){ 
alert(1);
}

答案 2 :(得分:0)

如果它是在动态加载的元素上,请尝试.live(),其工作方式与.bind()类似,只会保持搜索对动态添加的元素开放,并在它们出现时绑定它们。

答案 3 :(得分:0)

如果您正在寻找特定元素,可以使用setTimeout定期查找与新选择器匹配的元素。

function findNew() {
   var $selected = $('.some-selector').filter(function() {
       return !$(this).data('filtered');
   });

   $(document).trigger({type: 'elementadded', elements:$selected });

   $selected.data('filtered', true);

   setTimeout(findNew, 500);
}

$(document).on('elementadded', function(e) {
  alert('found ' + e.elements.length + ' new elements.');
});

findNew();