2012-02-09 43 views
0

我有这样的事情,它已经从jQuery的.append(html)临时禁用jQuery的事件

<div class="pPost"> 
<p>id</p> 
<div class="pPostIn"> 
    <div class="link"> 
     <a href="http://www.google.com"></a> 
    </div> 
    <div class="id"></div> 
    <div class="txt"></div> 
</div> 

然后一个jQuery函数这样创建:

编辑:3

$(function() { 
$(".link").live({ 
    mouseenter: function() { 
     $(this).css("background-position", "0 0"); //this works 
     $(".pPost").die(); 
    }, 
    mouseleave: function() { 
     $(this).css("background-position", ""); //this works 
     $(".pPost").live("click", ajaxCall); 
    } 
}); 
return false; 
}); 

而且这个按预期工作,但我想解决的问题是如何ke .link作为.pPost live函数的“可执行文件作为第一名”?我试图.unbind()/.undelegate().pPost,但我没有成功:

编辑:3

var ajaxLoad = function() { 
    $(".pPost").live("click", function() { 

     $.ajax({ 
      type: "POST", 
      url: "rucno/php/archive_page_helper.php", 
      data: idData, 
      cache: false, 

      success: function (html) {      
       $(pPost).append(html).hide().slideDown(400, function() { 
        $(".link").hide().delay(1000).fadeIn(1000); 
       }); 
      } 
     });    
    }); 
    return false; 
}; 

再次编辑,但是还是一样,它不会工作:)

回答

0

解决为 “RamboNo5” 表明,在后jQuery - How can I temporarily disable the onclick event listener after the event has been fired?

我只是为了修改它,这个我举例说明如何作品

HTML

<div class="pPost"> 
<p>id</p> 
<div class="pPostIn"> 
    <div class="link"> 
     <a href="http://www.google.com"></a> 
    </div> 
    <div class="id"></div> 
    <div class="txt"></div> 
</div> 

JS

$(function() { 
var active= true; 
$(function() { 
    $(".link").live({ 
     mouseenter: function() {    
      active= false;     
     }, 
     mouseleave: function() {     
      active= true;    
     } 
    }); 
    //return false; 
}); 


$(function() { 

    $(".pPost").live("click", function() { 

     if (!active) { 
      return; 
     } 

     $.ajax({ 
      type: "POST", 
      url: "rucno/php/archive_page_helper.php", 
      data: idData, 
      cache: false, 

      success: function (html) {       
       $(pPost).append(html).hide().slideDown(400, function() { 
        $(".link").hide().delay(1000).fadeIn(1000);       

       }); 

      } 
     }); 

     return false; 
    }); 
}); 
}); 
0

当您使用live绑定一个事件,请使用die解除绑定。
只有再次说出.bind()才能重新绑定事件。

看到这个问题temporalily解除绑定的事件: jquery temporary unbinding events

编辑

var ajaxLoad = function() { 
    $.ajax({ 
    //blablabla 
    }); 
    return false; 
}; 

编辑 重新绑定AJAX加载。

// Rebind like this 
$(".pPost").live("click", ajaxLoad); 

编辑 作为链接里面.pPost,当它重新加载,链接失去它们的结合,也应该rebinded。

// Rebind links 
$('a').click(fn); 
$('.pPost').load('blabla.html',function() { 
    $('.pPost a').click(fn); 
}); 

编辑 小心嵌入式的Ajax调用:

var ajaxLoad = function() { 
    $.ajax({ 
     type: "POST", 
     url: "blabla.php", 
     data: idData, 
     cache: false, 

     success: function (html) { 

      $(pPost).append(html).hide().slideDown(400, function() { 
       $(".link").hide().delay(1000).fadeIn(1000); 
      }); 
     } 
    }); 
}; 

然后:

$(".pPost").live("click", ajaxCall); 
+0

模具厂DUT redbind不:) ...我添加的代码后的第一个 – InTry 2012-02-09 13:44:59

+0

没有重新绑定不起作用,真的去http:// stackoverflow。com/questions/3408082/jquery-temporary-unbinding-events并阅读最佳答案!如果不用'.once()'绑定'.pPost',你的ajax调用是否需要运行多次? – sinsedrix 2012-02-09 13:54:06

+0

是的,它必须在鼠标离开后再次运行。链接区域 – InTry 2012-02-09 14:01:08