绑定两次或更多次的事件 jquery

Events being bound twice or more jquery

本文关键字:事件 jquery 两次 绑定      更新时间:2023-09-26

我正在尝试使用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 行,每次点击一个按钮时,之前绑定的所有函数似乎都绑定到同一个函数两次,这是一个问题。

感谢您的帮助!

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

$(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在评论中提到了它。