Jquery事件委托问题

时间:2013-11-05 11:59:26

标签: javascript jquery ajax

有谁能建议我在哪里出错? news_active是一个静态div,其他所有内容都是通过ajax调用加载的,警报没有触发任何内容,非常难倒?!

$('#news_active').load('ajax.php', function() {
    // Delete news active
    $('#news_delete').on('click', function() {
        var vNid = $('#news_delete').attr('data-nid').val();
        alert(vNid);
        //$('#news_active').load('ajax.php?nid='+vNid);
    });
});

按钮看起来像这样,有多个按钮加载了不同的data-nid值:

<button id="news_delete" data-nid="1">Delete</button>

3 个答案:

答案 0 :(得分:2)

您应该使用data()方法:

var vNid = $('#news_delete').data('nid');

或仅attr('data-nid')没有val()

val()正在尝试获取Element.value属性,但您没有button

答案 1 :(得分:2)

由于news_delete是动态加载的,因此您需要使用event delegation来注册事件处理程序,如:

// New way (jQuery 1.7+) - .on(events, selector, handler)
$('#news_active').on('click', '#news_delete', function(event) {
    var vNid = $('#news_delete').data('nid');
    alert(vNid); 
});

此外,在代码中获取data-nid属性值的方法也不正确。

要么使用它:

var vNid = $('#news_delete').attr('data-nid');  // No need of .val() here
alert(vNid);

或仅使用.data()

var vNid = $('#news_delete').data('nid');  
alert(vNid);

答案 2 :(得分:0)

var vNid = $('#news_delete').attr('data-nid').val(); //remove the value it 
                                              // will return the value of button

将其更改为

var vNid = $('#news_delete').attr('data-nid');