点击新添加的链接不执行javascript功能

时间:2012-05-25 18:24:58

标签: javascript jquery

在尝试使用jquery时,我创建了这个html和javascript。

<body>
<div id="results">
<div class="mylinkdiv">
<a class="mylinkclass" href="#">8</a>
: This is supposed to be a toaster.
<br>
<a class="mylinkclass" href="#">14</a>
: with a toaster maybe.
<br>
<a class="mylinkclass" href="#">51</a>
: If we're really creative.
<br>

</div>
</div>
<button id="remove" type="button" > Remove</button>
<button id="add" type="button" > Add</button>

</body>

javascript有一个弹出包含链接文本的消息的功能。它还有一个函数来添加一些链接到div。一个名为remove的函数,删除内部div。

$(document).ready(function(){
    $('.mylinkclass').click(function(){
           getLinkText(this);
        });

    $('#remove').click(function(){
           removeContents();
        });

     $('#add').click(function(){
           addContents();
        });
});

function getLinkText(that){
    var txt = $(that).text();
    var num = parseInt(txt);
    alert('num='+num);
    return false;
}

function addContents(){
  $('#results').append('<a class="mylinkclass" href="#">70</a>  new line1 <br>');
  $('#results').append('<a class="mylinkclass" href="#">77</a> new line2<br>');
}

function removeContents(){
  $('.mylinkdiv').remove();      
}

当我点击原始html页面中的链接(即3个链接)时,会弹出警告框。

当我点击添加按钮时,它会向div添加两个新链接。但是,当我点击这些新添加的链接时,警报不会弹出!

我无法理解为什么......有人能告诉我吗?

4 个答案:

答案 0 :(得分:3)

如果您使用的是jQuery 1.7,则使用.on;如果您使用的是jQuery 1.6,则使用.delegate

jQuery('#results').on('click','.mylinkclass',function() {
    getLinkText(this);
});

Demo

另一种方法是克隆现有元素Demo

var cloned = jQuery('.mylinkclass:last').clone(true);
jQuery('#results').append(cloned);

在第二种情况下,事件监听器也将被复制,您不需要使用.on或.delegate。

答案 1 :(得分:2)

您需要一个 delegate 事件处理程序,因为您的项目是在dom加载后动态创建的。

$('#results').on('click', '.mylinkclass', function() {
    getLinkText(this);
});

答案 2 :(得分:1)

第一次加载页面后添加链接到DOM时,链接不会绑定到jQuery事件。你应该使用:

$(document).on('click', '.mylinkclass', function() {

});

当我第一次遇到这个问题时,我正在使用“live()”,但是你不应该使用它,因为它根据jQuery文档被弃用了。

答案 3 :(得分:0)

你必须这样做:

$ ('. mylinkclass'). live ('click', function () {
alert ('OK')
});