Javascript jQuery单击被激发两次

Javascript jQuery单击被激发两次,javascript,jquery,onclick,Javascript,Jquery,Onclick,代码: wait标志防止在最后一个请求得到服务之前发送请求。我这样做是因为我跟踪一个nonce,并且在每个请求之后我必须获得一个新的nonce 同样,如果我删除数据服务,它也可以正常工作。但我需要为数据提供服务以获得新的nonce 另外,我没有看到它在任何地方坠毁。任何帮助都会很好。如果需要,我会发布任何其他函数。我的完整脚本相当大 下面是.box折叠父项的HTML: function updating(){ if(!wait) { $("#loading").html(

代码:

wait
标志防止在最后一个请求得到服务之前发送请求。我这样做是因为我跟踪一个nonce,并且在每个请求之后我必须获得一个新的nonce

同样,如果我删除数据服务,它也可以正常工作。但我需要为数据提供服务以获得新的nonce

另外,我没有看到它在任何地方坠毁。任何帮助都会很好。如果需要,我会发布任何其他函数。我的完整脚本相当大

下面是.box折叠父项的HTML:

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();
}

1.肖像画
(20)
移动到:移动:
| 
有多个
.box
实例,我没有在
h2
标记后显示内容(这就是我的
div
没有关闭的原因)

根据要求,这是一个逐步进行的过程:

  • 我在.box折叠实例上单击“折叠”。它发送其
    href
  • jQuery切换其幻灯片
  • 在回拨时,我从刚才单击的链接中获得新的href。它应该将查询字符串从
    expand=an_album
    更改为
    collapse=an_album
    ,反之亦然。我还将状态从“扩展”更改为“崩溃”。我正在根据刚才单击的包含
    .box
    的id搜索响应。我得到了正确的响应(collapse将变为expand),但是jQuery
    slideToggles
    两次
  • clearUpdate()
    中,我根据接收到的数据更新当前值。如果我得不到暂缓令,我就死定了。我还更新每个
    .box
    的图像计数
我已在成功中放置了一个警报,第一次单击时,我会得到一个警报。再次单击,我将获得一个警报。第三次单击,我会收到两个警报。第四次,4个警报

我还做了
alert($(“.box collapse”).length)在my
clearUpdate()
中,并且大小不变

错误存在于成功函数和/或clearUpdate中。由于我收到的HTML与我已经收到的完全相同(减去上面的更改),我是否可能正在重新分析javascript并重新绑定单击?但这似乎不可行,因为我应该在第一次点击后发射多次。 更新 我在
$(document).ready()
中添加了一个警报,每次收到响应时都会收到警报。因此,它正在重新解析javascript并重新绑定单击。我的即时修复方法是将其更改为:
$(“.box collapse”).die(“click”).live(“click”,function())
,但我将添加一个查询来禁用javascript头


谢谢你的帮助

如果数据包含.box collapse类,则这很可能会创建第二次单击事件

    <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>&nbsp;Move: <a href='images?n=story,portrait,capture,press,concerts&port=1&nonce=I8FX2BH841'>down</a></span></span>
<span class='album-marker'>&nbsp;|&nbsp;<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> 
这令人担忧。这意味着resp中有一个元素与b中的元素具有相同的id。 从live切换到click的原因很可能是click事件 发生两次

var ncol=resp.find(“#”+c+”.box collapse”)

对.box collapse或数据的内容了解太少,无法理解

var col = $("#"+c+" .box-collapse");
现在我想我终于明白了

将数据更改为包含JSON对象或更简单的HTML结构,其工作方式应如下所示

好榜样

col.html(ncol.html());
col.attr('href',ncol.attr('href'));
坏榜样

服务器响应:

 data == { "innerText":"expand", "url":"images?expand=portrait&nonce=I8FX2BH841" }

 col.html(data.innerText);
 col.attr('href', data.url);
data==expandimages?expand=纵向和非纵向=I8FX2BH841
var div=$(“”).html(数据);
col.html(div.find(“.innerText”).html();
col.attr(div.find(“.url”).html());

调整clearUpdate功能

你能显示与此点击事件相关的HTML吗?你真的需要live吗?您的.box折叠是如何添加的?嗯,HTML是页面的确切内容,因此有很多。你有什么特别想看的吗?我还没有把它公之于众,否则我会让你去探索它。@sunn0。忘了提到,如果我删除live并只需单击一下,它会在第一次单击后立即触发两次。我们需要查看周围的整体标记。框折叠(直接父项和子项)感谢您的评论。您是对的,我想将响应更改为JSON,但为了开始测试,我只是将响应保留为HTML。当我期望得到我已有的响应时,它使我更容易进行测试。很好地掌握了身份证,你是对的。当我收到回复时,我从来没有想过要有一个非唯一的ID。我很感激你的意见,我很快就会修改的。
col.html(ncol.html());
col.attr('href',ncol.attr('href'));
 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());