事件被绑定两次或更多jquery

时间:2012-06-28 01:58:05

标签: javascript jquery

我正在尝试使用javascript动态生成HTML。我对我页面上的按钮点击有约束力。我的页面上有多个按钮,这些按钮会导致我的元素被多次绑定,从而产生所需的结果,以便按下单击按钮的次数。

我的问题是有什么可以检查一个元素是否已经绑定在jquery中?如果是这样,我如何将其与jquery中的.live()函数合并。

这是我的代码:

$(document).ready(

    function () {
        $(':button').live("click", ".textbox, :button", function () {
            alert("binding");
            $(".textbox").click(function () {
                defaultVal = this.defaultValue;
                if (this.defaultValue) {
                    this.value = "";
                }
            });
            $(".textbox").blur(function () {
                if (this.value == "") {
                    this.value = defaultVal;
                }
            });
            $('[name="numsets"]').blur(function () {
                if (!parseInt(this.value)) {
                    $(this).val("you need to enter a number");
                }
            });
            $('[name="weightrepbutton"]').click(function () {
                var $numsets = $(this).parent().children('[name="numsets"]');
                if ($numsets.val() != "you need to enter a number" && $numsets.val() != "Number of Sets") {
                    var numbersets = parseInt($numsets.val())
                    repandweight.call(this, numbersets)
                    $(this).hide();
                    $numsets.hide();
                }
            })
        });
    });

问题是第4行,每次单击一个按钮时,之前绑定的所有函数似乎都被绑定到同一个函数两次,这是一个问题。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

你这样做了两次!一个在另一个里面取出外部绑定,它应该工作

$(document).ready(function () {

      $(document).on("click",".textbox",function () {
          defaultVal = this.defaultValue;
          if (this.defaultValue) {
               this.value = "";
          }
      });

      $(document).on("blur",".textbox",function () {
          var item=$(this);
          if (item.val() == "") {
               item.val(defaultVal);
          }
      });

      $(document).on("blur","input[name='numsets']",function () {
          var item=$(this);
          if (!parseInt(item.val())) {
                item.val("you need to enter a number");
          }
      });

      $(document).on("click","input[name='weightrepbutton']",function () {
                var $numsets = $(this).parent().children('[name="numsets"]');
                if ($numsets.val() != "you need to enter a number" && $numsets.val() != "Number of Sets") {
                    var numbersets = parseInt($numsets.val())
                    repandweight.call(this, numbersets)
                    $(this).hide();
                    $numsets.hide();
                }
      })            
    });

如果您使用的是jQuery 1.7+版本,请考虑切换到jQuery on而不是live

编辑:已将live更新为on,因为OP在评论中提到了这一点。