.blur()vs .on(),哪个更好用(当前)

时间:2014-07-28 07:28:24

标签: javascript jquery

我正在进行第一次表单计算,这是我在最后一天研究并提出的jQuery。

这只是我发现的一切都工作顺便,不一定是最好的方式。我的老板希望我使用.blur()而不是.on(),但我觉得,.on()能够使用 keyup&单击表单输入上的

有人可以告诉我哪种情况更适合在这种情况下使用? .on()是否已被折旧并且更好地使用.blur()还是在这种情况下它们都可以正常使用?此外,如果模糊是更好的使用可以有人告诉我如何重新做我的功能w /模糊所以我在正确的道路上?谢谢!

http://jsfiddle.net/V5hrY/4/

$(".ticket input").on("keyup click", function(){

    //input changes Individual total
    var thisTotal = $(this).closest(".info").find('.total p span');
    var thisPrice = $(this).closest(".info").find('.price p span');
    var thisInput = $(this).closest(".info").find('.ticket input');
    thisTotal.html(thisPrice.html() * thisInput.val());

    //input changes Grand total
    var sum = 0;
    $('.total p span').each(function(){
        sum += parseFloat($(this).text());
        $('.gTotal span').html(sum);
    });

});

3 个答案:

答案 0 :(得分:3)

使用.blur()(或"模糊"事件监听器)的事情是,只有在您远离字段时才会更新小计,因此更新不是&#34实况#34; 本身。我建议你坚持听取点击和键盘事件,以便在旅途中更新小计。

如果您想使用模糊,只需更改此行:

$(".ticket input").on("keyup click", function(){

...到这一行:

$(".ticket input").on("blur", function(){

您可以在这个小提琴(http://jsfiddle.net/teddyrised/V5hrY/7/)中看到使用.blur()侦听器的位置,您可以看到更改数量时不会立即更新小计,但只有在您远离该领域。

p / s:就像我在评论中提到的那样,使用.on()是正确的方法。事实上,它已经被弃用了(.live().delegate()。我肯定会建议使用.on()而不是.blur() :)你的直觉实际上是正确的;)


另外,如果你想将事件监听器绑定到动态添加的元素,我建议使用以下命名法:

$(document).on("keyup click", ".ticket input", function(){

...或者如果你想听模糊事件:

$(document).on("blur", ".ticket input", function(){

答案 1 :(得分:1)

您可以将.on()与许多不同的事件一起使用,包括.blur()。 所以你实际上可以使用:

$(document).on("blur", ".ticket input", function(){

});

你可以称之为“最佳实践”。 但在这种情况下,我认为keyup是好的所以我建议:

$(document).on("keyup", ".ticket input", function(){

});
祝你好运

答案 2 :(得分:1)

.blur()不适用于动态添加元素,也需要在ready函数中声明,而.on(' blur')有效。 看看

$(function(){
         $('#elm').blur(function(){ alert('Blured') }); 
         // assume element button with id button is already present in html
          $('#button').click(function(){
                     $('body').append('<input type="text" id="elm"  />'); // blur event above will not work on input with id elm
          });

});

 $(document).on('blur','#elm',function(){  alert('blured')  }); // this will work for dynamic added input field