Javascript 使用jQuery进行少量ajax请求后,live()、delegate()和on()停止工作

Javascript 使用jQuery进行少量ajax请求后,live()、delegate()和on()停止工作,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我有ajaxem类的html元素,这些元素将在下面的jquery中使用。对于任何表单元素,我也有相同的方法。对于前几个ajax请求,jquery被附加和触发并正常工作。但是,在用户登录或注册后,jquery不会捕获并触发返回的链接,这些链接也具有class=ajaxem 我已经尝试了所有三种实现。并尝试在每次ajax请求后重新应用它们。但没有一个成功 <script type="text/javascript"> function updateajaxem() { $(d

我有ajaxem类的html元素,这些元素将在下面的jquery中使用。对于任何表单元素,我也有相同的方法。对于前几个ajax请求,jquery被附加和触发并正常工作。但是,在用户登录或注册后,jquery不会捕获并触发返回的链接,这些链接也具有class=ajaxem

我已经尝试了所有三种实现。并尝试在每次ajax请求后重新应用它们。但没有一个成功

<script type="text/javascript">
function updateajaxem() {


    $(document).on("click", "a.ajaxem", function (e) {
        e.preventDefault();

        var action = $(this).attr('href');
        //alert(action);
        if (action.indexOf('register') > 0) {

            $("div#logininfo").load("http://localhost/testrun/auth/register/").fadeIn();

        } else if (action.indexOf('password') > 0) {
            $("div#logininfo").load("http://localhost/testrun/auth/forgot_password/").fadeIn();

        }

    }); //end 
}
</script>
<script type="text/javascript">
 updateajaxem();

//$("a.ajaxem").live("click", function(e){ 

$(document).on("click", "input:submit", function (e) {
    e.preventDefault();

    var formaction = $(this).closest('form').attr('action');
    var dataString = $(this).closest('form').serialize();
    alert(dataString);
    //$("div#logininfo").load(formaction,data);
    $.ajax({
        type: "POST",
        url: formaction,
        data: dataString,
        //   dataType: "json",
        success: function (data) {
            alert(data);

            $("div#logininfo").html(data);
            updateajaxem();


        } // end of success
    });





});
</script>
这是没有意义的,因为它包含了ajaxem类,该类应该被jquery捕获,但不是。

因为返回的链接的href不包含单词“register”或“password”,以下两个条件都不满足:

if (action.indexOf('register') > 0) {
    $("div#logininfo").load("http://localhost/testrun/auth/register/").fadeIn();
} else if (action.indexOf('password') > 0) {
   $("div#logininfo").load("http://localhost/testrun/auth/forgot_password/").fadeIn();
}
因此没有ajax请求发生

您可能需要考虑“登录”场景,例如:

} else if (action.indexOf('login') > 0) {
   $("div#logininfo").load("http://localhost/testrun/auth/login/").fadeIn();
}
…既然可以从单击的锚中提取URL,为什么还要硬编码URL

if (action.indexOf('register') > 0) {
    $("div#logininfo").load(this.href).fadeIn();
} else if (action.indexOf('password') > 0) {
   $("div#logininfo").load(this.href).fadeIn();
} else if (action.indexOf('login') > 0) {
   $("div#logininfo").load(this.href).fadeIn();
}

现在,您可能还会注意到最终if/elseif语句的分支中有一个相似之处。。。还有更多的重构-@克里斯-同意。我实际上认为if语句是多余的,因为所有的分支至少在示例代码中都做相同的事情。当然,它在else上什么也不做,但我不确定是否只是删除整个if检查,而只支持$divlogininfo.loadthis.href.fadeIn;可能不会更好。。。
if (action.indexOf('register') > 0) {
    $("div#logininfo").load(this.href).fadeIn();
} else if (action.indexOf('password') > 0) {
   $("div#logininfo").load(this.href).fadeIn();
} else if (action.indexOf('login') > 0) {
   $("div#logininfo").load(this.href).fadeIn();
}