0

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

谢谢您的帮助!

4

1 回答 1

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.

编辑:更新liveonOP 在评论中提到的。

于 2012-06-28T02:19:45.620 回答