为什么jQuery函数只在第一次被调用时才起作用?

时间:2011-03-11 16:02:51

标签: ajax jquery

有一个链接,当点击时,在将HTML加载到div并清空div之间切换。当单击div加载html时,我使用jQuery ajax load()函数。加载文本时,我想显示“Please wait ...”,所以我尝试使用jQuery ajaxStart()和ajaxStop()方法,但它们似乎只在第一次调用load()函数时才起作用。所以我切换到ajaxSend()和ajaxSuccess,但这似乎只在第一次调用load函数时才起作用。怎么了?

HTML:

<p id="toggleDetail" class="link">Toggle Inspection Detail</p>
<p id="wait"></p>
<div id="inspectionDetail"></div>

jQuery的:

$(
    function(){
        $('#toggleDetail').click(function(){
            if($.trim($('#inspectionDetail').text()).length)
            {
                $('#inspectionDetail').empty();
            }
            else
            {
                $('#inspectionDetail').load('srInspectionDetailFiller.cfm');
            }
        });
    }           
);

$(
    function(){
        $('#wait').ajaxSend(function() {
            $(this).text('Please wait...');
        });
    }
);
$(
    function(){
        $('#wait').ajaxSuccess(function() {
            $(this).text('');
        });
    }
);

1 个答案:

答案 0 :(得分:2)

您应在click功能中填写“请稍候...”消息,然后在成功完成load时清除消息:

$('#toggleDetail').click(function(){
    if($.trim($('#inspectionDetail').text()).length)
    {
        $('#inspectionDetail').empty();
    }
    else
    {
        $('#wait').text('Please wait...');
        $('#inspectionDetail').load('srInspectionDetailFiller.cfm', function() {
                $('#wait').text('');
        });
    }
});

修改虽然ajaxSend在技术上应该在这里工作,但我不推荐它。使用ajaxSend“无论要发送什么Ajax请求,都会调用所有ajaxSend处理程序”。在页面上挂钩所有Ajax请求对你来说似乎有点过分了,你真的只想点击这一次点击。