jQuery重新绑定.click?

时间:2012-10-18 14:30:42

标签: jquery

我有多次点击,点击后我必须取消绑定,但我需要重新绑定链接按钮。

以下是一个例子:

$('.001').click(function(){
      jQuery(this).unbind('click');
      jQuery('.hide').hide();
      jQuery('.show').show();
      jQuery(this).find('.show').hide();
      jQuery(this).find('.hide').load('pages/001.html');
      jQuery(this).find('.hide').show();

    }); 

    $('.002').click(function(){
      jQuery(this).unbind('click');
      jQuery('.hide').hide();
      jQuery('.show').show();
      jQuery(this).find('.show').hide();
      jQuery(this).find('.hide').load('pages/002.html');
      jQuery(this).find('.hide').show();
    });

所以当我点击.001时,它会加载一个页面,里面有一个不同的jQuery动作(一个滑块),所以我必须解除对.001的点击(因此jQuery(this).unbind('click'); ),但是当我点击.002时,我必须重新点击.click .001。这必须使用变量来完成,因为它可以从001到999。

任何提示?

2 个答案:

答案 0 :(得分:2)

您不需要一次又一次地绑定和重新绑定处理程序。只需将激活项目的标识符存储在某处,然后在每个单击处理程序中检查它。像这样:

var active;
$('.some_class').click(function() {
  if (this.className === active) {
    return false;
  }
  active = this.className;
  ...
});

另外,我强烈建议为所有相关项目分配一个且仅一个函数作为事件处理程序,根据外部属性分析其操作。像这样:

<a class="first" data-url-to-go="/first.html">Some Link</a>
<a class="second" data-url-to-go="/second.html">Some Other Link</a>
...
var active;
$('.first, .second').click(function() {
  if (this.className === active) {
    return false; 
  }
  active = this.className;
  var $this = $(this), 
      url = $this.data('urlToGo');
  ...
});

这是一个JS Fiddle来说明这个概念。

答案 1 :(得分:-1)

for(i=1;i<1000;i++){
    var query_str
    var page_to_load;
    if(i<10){
        query_str = ".00"+i
        page_to_load = "pages/00" + i + ".html"
    }
    else if(i>10 && i<100){
        query_str = ".0"+i
        page_to_load = "pages/0" + i + ".html"
    }
    else{
        query_str = "."+i
        page_to_load = "pages/" + i + ".html"
    }


     $(quer_str).click(function(){
      jQuery(this).unbind('click');
      jQuery('.hide').hide();
      jQuery('.show').show();
      jQuery(this).find('.show').hide();
      jQuery(this).find('.hide').load(page_to_load);
      jQuery(this).find('.hide').show();

    }); 

}

这不是很好的表现,但这就是你要求的