代码:
$(".box-collapse").live("click",function(){
if(updating()) return false;
var b = $(this).parent().parent();
b.find(".album-div").stop(true,false).slideToggle();
$.ajax({
url: addNonce($(this).attr("href")),
success:function(data){
c = b.attr("id");
var resp = $('<div />').html(data);
var col = $("#"+c+" .box-collapse");
var ncol = resp.find("#"+c+" .box-collapse");
col.html(ncol.html());
col.attr('href',ncol.attr('href'));
resp.remove();
clearUpdate(data);
wait = false;
}
});
return false;
});
此点击被点击两次。
会发生什么:
它只在第二次点击后开始多次射击。这令我感到困惑。
如果删除数据服务,则不会触发两次。我在服务上做错了什么? (即我只在wait = false
)
success
我在此次通话中使用的其他功能:
function updating(){
if(!wait) {
$("#loading").html('Updating...');
wait = true;
return false;
}
else {
$("#loading").html('Slow down...');
return true;
}
}
function clearUpdate(data){
var resp = $('<div />').html(data);
//alert(resp.find("#nonce").val() + " "+$("#nonce").val());
$("#loading").html(resp.find("#loading").html());
if(typeof(resp.find("#nonce").val()) == 'undefined'){
alert(data);
$("#loading").html("Fatal error. Your session could have ended. <a href='javascript:location.reload()'>Refresh</a>");
resp.remove();
return false;
}
else if(resp.find("#errorcode_").val() == "refresh"){
location.reload();
}
resp.find(".image-box").each(function(){
$("#"+$(this).attr("id")).find(".image-count").html($(this).find(".image-count").html());
});
$("#nonce").val(resp.find("#nonce").val());
wait = false;
resp.remove();
}
wait
标志阻止在服务最后一个请求之前发送请求。我这样做是因为我跟踪一个nonce,我必须在每个请求后得到一个新的nonce。
同样,如果我删除数据服务,它工作正常。但我需要为数据提供服务以获得新鲜的随机数。
另外,我没有看到它在任何地方崩溃。任何帮助都会很棒。如果需要,我会发布任何其他功能。我的完整脚本非常大。
以下是.box-collapse父级的HTML:
<div class='box image-box album-marker-visible image-box-w-20 image-box-list-0' id='portrait'>
<h2 class='box-header image-box-header'>
<input type='checkbox' name='albums[portrait]'>
<span class='image-box-header-move'>
<span class='image-album-number'>1</span>. Portrait <input type='hidden' class='image-album-anchor' value='portrait'>
<input type='hidden' class='image-album-portfolio' value='1'>
<span class='image-count'>(20)</span>
<span class='box-mover'>Move to: <a href='images?n=bridals,weddings,engagement,portrait&port=2&nonce=I8FX2BH841' title='Move to Wedding Portfolio'>Wedding Portfolio</a> Move: <a href='images?n=story,portrait,capture,press,concerts&port=1&nonce=I8FX2BH841'>down</a></span></span>
<span class='album-marker'> | <a href='images?ia=3&action=hide&nonce=I8FX2BH841' title='Mark album as hide' class='album-mark-hide album-mark'>hide</a></span>
<a class='box-mover-show box-collapse' href='images?expand=portrait&nonce=I8FX2BH841' title='Expand Portrait'>expand</a></h2>
.box
有多个实例,我没有在h2
标记后显示内容(这就是我的div
未关闭的原因。)
根据要求,这是应该发生的一步一步的过程:
href
。expand=an_album
更改为collapse=an_album
,反之亦然。我还将状态从“展开”改为“崩溃”。我正在根据我刚刚点击的包含.box
的ID搜索响应。我得到正确的响应(崩溃将更改为扩展),但jQuery slideToggles
两次。 clearUpdate()
中,我从收到的数据中更新我的随机数。如果我没有收到一个nonce,我就死了。我还会更新每个.box
的图像数。我已成功发出提醒,第一次点击时,我会收到一个提醒。再次点击,我会收到一个提醒。点击 THIRD 时间,我会收到两个提醒。第四次,4次提醒。
我已在alert($(".box-collapse").length);
中完成了clearUpdate()
,且尺寸不会改变。
错误在于成功功能和/或clearUpdate。由于我收到与我已有的完全相同的HTML(减去上面的更改),我是否有可能重新解析javascript并重新绑定点击?但这似乎不可行,因为我应该在第一次点击后多次开火。
的更新
我在$(document).ready()
添加了一个提醒,每次收到回复都会收到提醒。所以它重新解析javascript并重新绑定点击。我的立即修复是将其更改为:$(".box-collapse").die("click").live("click",function())
但我会添加一个查询来禁用javascript标题。
感谢您的帮助!
答案 0 :(得分:1)
如果数据包含.box-collapse类
,则很可能会创建第二次点击事件var resp = $('<div />').html(data);
你真的需要班级选择器吗?标识符应该是唯一的 这使得b.html()== $(“#”+ c +“。box-collapse”)。html()和b == col [0]
var col = $("#"+c+" .box-collapse");
这令人担忧。这意味着在resp中有一个与b内的id相同的元素。 这很可能是切换到click实时点击事件的原因 发生两次。
var ncol = resp.find(“#”+ c +“。box-collapse”);
对.box-collapse内容或要理解的数据知之甚少
col.html(ncol.html());
col.attr('href',ncol.attr('href'));
现在我想我终于明白了。
将数据更改为包含JSON对象或更简单的HTML结构,它应该像这样工作。
很好的例子
data == { "innerText":"expand", "url":"images?expand=portrait&nonce=I8FX2BH841" }
col.html(data.innerText);
col.attr('href', data.url);
错误示例
服务器响应:
data == <span class="innerText">expand</span><span class="url">images?expand=portrait&nonce=I8FX2BH841</span>
var div = $("<div />").html(data);
col.html(div.find(".innerText").html());
col.attr(div.find(".url").html());
并调整clearUpdate函数