我正在使用javascript var来控制ajax调用的运行。该调用是通过单击事件(在“#week _tag
”div上)触发的,并且每页加载只需运行一次。相同的单击事件也会切换滑动窗格(“#week_summary”)的显示,其中显示来自ajax调用的数据。
在下面的示例中,我尝试使用变量和if语句禁止在用户第二次单击“#week _tag
”div以关闭滑动时调用ajax调用窗格。加载页面时var状态设置为“before”,一旦进行ajax调用,设置为“after”。如果var status等于“before”,则运行调用,否则只切换“#we_s_smarymary”。它不起作用,因为我不知道如何将var“status”赋予“after”的第二个值。有什么想法吗?
$(document).ready(function(){
var status = "before";
alert("before:"+status);
$('#week_tag').click(function(){
if(status =="before"){
alert("afterclick:"+status);
var form_date_set = $("input[name='date_set']").val();
$.post("/tortus/index.php/daylog/build_summary",
{date_set:form_date_set},
function(html){
$("#week_summary").html(html);
var status = "after";
});
}
$('#week_summary').toggle('blind');
alert("after:"+status);
});
});
答案 0 :(得分:4)
那是因为你在回调函数中声明了一个新变量,给它本地范围。如果从回调函数中删除var
,它应该按预期工作。
$.post("/tortus/index.php/daylog/build_summary",
{date_set:form_date_set},
function(html){
$("#week_summary").html(html);
status = "after";
alert("status: " + status);
});
编辑:当然,正如下面的评论中所述,由于呼叫是异步的,因此您还需要提醒回调状态。或者在一些随机元素上创建一个新的onclick事件,它只显示状态:
$(document).ready({
var status = "before"
...
//your previous onclick event here
...
$("#newElm").click(function() {
alert("status: " + status);
});
});
答案 1 :(得分:2)
如果您希望您的点击处理程序只运行一次,请使用.one
方法绑定您的处理程序。这保证只会调用一次,因为您的处理程序在事件发生时自动解除绑定,就在运行代码之前。请参阅docs.jquery.com上的.one documentation。
使用示例:
$('#week_tag').one('click', function() {
// This code will only be run once, after #week_tag got clicked on.
});
使用此方法您根本不需要跟踪状态,jQuery会为您解决此问题。