我有 3 个文件:
- js_json.js -> 用于我的 json 代码
- javascript.js -> 用于我的 javascript 功能
- index.php
这里是 js_json.js
的代码:
$(function(){
$('#postTitle').change(function(){
var title_id = $("#postTitle").val();
$.ajax({
type:"post",
url:"proses.php",
data:"title_id=" + title_id,
dataType:"json",
success:function(data){
body="";
//$.each(data, function(i,n){
//body = n['body'];
//});
body += "<a href=\"javascript:void(0);\" id=\"pesan\" name="pesan" onClick=\"\">Hola Test</a>";
$(".postBody").empty();
$(".postBody").append(body);
},
error:function(data){
$(".postBody").empty();
$(".postBody").append("NO Post Selected.");
}
});
return false;
});
});
这是我的 javascript.js
代码:
$(function (){
$("a[name=pesan]").click(function (){
alert("holalalalalal.....!");
});
});
这里是 index.php
代码:
//some code
<body>
<a href="javascript:void(0);" id="pesan" name="pesan">Hola Test 1</a>
Posts : <br />
<select name="title" id="postTitle">
<option value="">Select Post...</option>
<?php
$sql = "SELECT id, title FROM posts ORDER BY title";
$query = mysql_query($sql) or die(mysql_error());
while($rows = mysql_fetch_array($query)){
print('<option value="' . $rows['id'] . '">' . $rows['title'] . '</option>');
}
?>
</select>
<br />
Body : <br />
<div class="postBody">
Will show the body of post.
</div>
</body>
</html>
我的问题是:
当我点击链接“Hola Test 1”时,它起作用了,并且出现了消息。问题是,在我点击选择选项后,“Hola Test”链接出现,然后我点击那个(“Hola Test”)链接,消息没有出现并且 Firebug 中没有错误......
有人能给我解释一下为什么……吗?谢谢...
最佳答案
click()
只会为调用 click
时页面中存在的元素绑定(bind)事件(同样适用于 on()
没有选择器,bind()
,以及绑定(bind)快捷方式组中的所有其他方法;keydown()
,change()
等)。
因为您的其他元素是通过 AJAX 添加的一段时间后,处理程序未绑定(bind)它。
使用.on()
而是使用选择器,它将事件绑定(bind)到选择器匹配的所有当前和 future 元素。
$(function (){
$(document).on('click', 'a[name=pesan]', function () {
alert("holalalalalal.....!");
});
});
由于 on()
是在 jQuery 1.7 中引入的,如果您使用的是较早版本的 jQuery(如提出此问题时存在的版本),则可以使用 live()
或 delegate()
而不是开;
$(function (){
$('a[name=pesan]').live('click', function () {
alert("holalalalalal.....!");
});
});
关于javascript - jQuery 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6173238/