绑定和取消绑定事件jQuery

时间:2017-08-02 10:26:21

标签: javascript jquery bind

我允许用户在我的网站中更改字体大小,每次用户点击ID "Large"时,1px都会添加到字体中,同样点击"small" 1px也会减少。

此外,用户不允许两次点击同一个按钮,因此我在该按钮上取消绑定点击事件,但是点击其他按钮后可以点击,这里我使用绑定点击事件,但它没有&#39在解开后似乎工作。



$("#large").on("click", function() {
    $(this).unbind('click');
    $("#medium").bind('click');
    $("#small").bind('click');
    $("div").children().each(function() {
        var size = parseInt($(this).css("font-size"));
        size = size + 1 + "px";
        $(this).css({
            'font-size': size
        });
    });

});

$("#medium").on("click", function() {
    $(this).unbind('click');
    $("#large").bind('click');
    $("#small").bind('click');
    $("div").children().each(function() {
        var size = parseInt($(this).css("font-size"));
        size = size + 0 + "px";
        $(this).css({
            'font-size': size
        });
    });
});

$("#small").on("click", function() {
    $(this).unbind('click');
    $("#medium").bind('click');
    $("#small").bind('click');
    $("div").children().each(function() {
        var size = parseInt($(this).css("font-size"));
        size = size - 3 + "px";
        $(this).css({
            'font-size': size
        });
    });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

 <a href="" id="large">Large</a>
 <a href="" id="medium">Medium</a>
 <a href="" id="small">Small</a>

  <div>
        <p>Lorem ispsum dolor</p>
        <h1>Lorem ispsum dolor Lorem ispsum dolor Lorem ispsum dolor</h1>
        <h3>Lorem Ipsum</h3>
  </div> 
 

        

<!-- begin snippet: js hide: false console: true babel: false -->
&#13;
&#13;
&#13;

这是小提琴:

https://jsfiddle.net/Nag/etsbapgu/

1 个答案:

答案 0 :(得分:0)

您的方法导致巨大的代码重复。更好的选择是将data diff存储在data- *属性中并绑定hanlder一次。然后只需检查处理程序的前一个差异设置。

这样您就可以在将来添加更多链接(比如Extra Small或Extra Large),而无需接触您的代码。

$('[data-font]').click((function(current){

  return function(e) {
     var $this = $(this),
         font = parseInt($this.data('font')),
         // remove previous diff and add new
         diff = -current + font;
         
     e.preventDefault();
         
     // same button click
     if(current === font) return
         
     // save for the next call
     current = font;
     
     $('div').children().css('font-size', function() {
       return parseFloat($(this).css('font-size')) + diff + 'px';
     }) 
     
  }
 
}(0)))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

 <a href="" data-font="+3">Large</a>
 <a href="" data-font="0">Medium</a>
 <a href="" data-font="-3">Small</a>

  <div>
        <p>Lorem ispsum dolor</p>
        <h1>Lorem ispsum dolor Lorem ispsum dolor Lorem ispsum dolor</h1>
        <h3>Lorem Ipsum</h3>
  </div>