我有一些jQuery ajax的奇怪问题。我通过.hover事件调用jQuery ajax函数,它工作正常。我得到一些响应,我在div中显示该响应。
但是,如果我想在<a>
上调用jQuery,这是来自.click
事件之前的jQuery ajax调用的响应,我无法调用它。
任何人都可以帮助我吗?
这是jQuery ajax函数..
function call_jqry_ajx(file_name,show_div_id,function_name,parameter){
$.ajax({
type: "POST",
url: file_name,
data: parameter,
success: function(msg){
alert( "Data Saved: " + msg ); //Anything you want
$("#show_div").html(msg);
alert("Done with div..");
}
});
}
$(document).ready(function ()
{
$(".a_class").click(function(){
alert("double times called but still getting alert.. :)");
return false;
});
});
在我的div中我得到这样的反应..
<div id="show_div">
<a class="a_class" id="a_id">Call Anchor</a>
</div>
我无法在标签的链接
中执行我的jQuery函数答案 0 :(得分:2)
在对象实际出现在页面中之前,您正在注册click事件。因此,它没有为其分配事件处理程序。
要解决这个问题,您应该使用.delegate()
(对于pre-jQuery 1.7)或.on()
(对于jQuery 1.7+)来使用委托事件处理。这将在将生成事件的实际内容的父对象上注册事件。您在注册事件时选择开头的父对象,然后事件冒泡允许捕获新创建的对象中的事件。
您可以将代码更改为:
$(document).ready(function () {
$('#show_div').on('click', '.a_class', function(){
alert("double times called but still getting alert.. :)");
return false;
});
});
这会在click
对象上注册#show_div
事件,但只有在事件源自与.a_class
选择器匹配的对象时才触发事件处理程序。因此#show_div
内的对象可以来去,事件处理程序将保持不变。
有关.on()
的更多信息,请参阅jQuery doc。这取代了现在已弃用的.live()
,但过去常常是这样做的首选方式。