2012-07-06 59 views
0

在下面为什么jQuery不注册我的<a>点击?

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> 
</head> 
<body> 
<a href="#">test</a> 
<button id="btn-add">Add</button> 
<div id="placeholder"> 
</div> 
<script type="text/javascript"> 
    $(document).ready(function() { 

     $('a').on('click', function() { 
      alert('clicked'); 
     }); 

     $("#btn-add").on("click", function() { 
      $('#placeholder').prepend('<a href=\'#\'>blah2</a>'); 
     }); 
    }); 
</script> 
</body> 
</html> 

的例子如果你在“添加”,然后单击“blah2”什么都不会发生,即使我想任何锚点击提醒。因为如果你点击一个检查“test'you得到弹出

回答

3

试试这个:

$('body').on("click", "a", function() { 
    alert('clicked'); 
}); 

Link to fiddle

0

它,因为你需要委派点击父元素。如果您使用的是1.7+以上,则使用.on或者如果您使用的是1.6以下,则可以使用.delegate()。该元素在dom准备就绪时不存在,因此您需要将事件delegate添加到父元素。这意味着你可以使用$(document)或使用任何父元素已经存在

$(document).on("click","a", function() { //<-- this allows for the event to bubble up to the document in this case 
     alert('clicked'); 
}); 

$(document).delegate("a","click", function() { 
     alert('clicked'); 
}); 
+0

我不会将一个事件委托给'$(document)' - 你想使用最接近的父对象。 – ahren 2012-07-06 02:48:22

3

由于元素是动态生成的,你需要使用代表团与on()方法或创建一个文字jQuery对象,并添加一个click事件。

$('closestParent').on('click', 'a', function(){ ... }) 

// OR 

var $link = $('<a href=\'#\'>blah2</a>').click(function(){ ... }) 
$link.prependTo('#placeholder') 
相关问题