jQuery ajax函数没有按预期工作

时间:2012-02-06 07:05:06

标签: javascript jquery

我有一些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函数

1 个答案:

答案 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(),但过去常常是这样做的首选方式。