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 行目です。ボタンがクリックされるたびに、以前にバインドされていたすべての関数が同じ関数に 2 回バインドされているように見えます。これが問題です。

助けてくれてありがとう!

4

1 に答える 1

3

あなたはそれを2回やっています!1 つ別の内部。外側のバインディングを取り出すと、うまくいくはずです

$(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 onliveに切り替えることを検討してください。

編集: OPがコメントで言及したように更新liveしました。on

于 2012-06-28T02:19:45.620 に答える