jQuery.of()未按预期工作

  • 本文关键字:工作 of jQuery jquery
  • 更新时间 :
  • 英文 :


我正在使用DOM,我发现了一些奇怪的东西。以下是将事件处理程序添加到jQuery对象的代码:

 function randomizeTiles() {
       var $tiles = $("#letterbox a");
       $tiles.each(function() {
            var index = Math.floor(Math.random() * 100);
            var letter = frequencyTable[index];
            $(this).attr("class", $(this).attr("class") + " l" + letter);
            $(this).on("click.add", addLetter);
    });
    }

该代码添加了事件处理程序addLetter,其中包含在完成调用后删除事件处理程序的代码:

    function addLetter() {
  var tileClasses = $(this).attr("class").split(" ");
  var letterClass = tileClasses[2];
  var tileLetter = letterClass.substring(1,2);
  var $currentWordDiv = $("#currentWord");
  if ($currentWordDiv.children().length === 0) {
  var $p = $("<p></p>");
  $currentWordDiv.append($p);
  $p.append(tileLetter);
  var $submitDiv = $("#submit");
  var a = $submitDiv.children(":first-child");

  a.on("click.sub", submitWord);
  }

  else {
    var p = $currentWordDiv.children(":first-child");
    //Get text value of the p element
    var letterText = p.text();
    //Adds the tile letter to current letter(s) in letterText
    letterText += tileLetter;
    //Replaces the current text with the updated text
    p.text(letterText);

  }
  $(this).attr("class", $(this).attr("class") + " disabled");
  $(this).off("click.add");

}

尽管它在大多数情况下都能工作,但有时事件处理程序即使被删除,仍会激发。这个问题有什么解决办法吗?

如果事件只使用一次,则可以使用"one"而不是"on"。

$(this).one("click.add", addLetter);

这将在第一次触发后自动解除绑定。

参考:http://api.jquery.com/one/

如果randomizeTiles被重复调用,您可能正在堆叠绑定。如果是这种情况,您可能希望将其更改为:

$(this).off("click.add").one("click.add", addLetter);

相关内容

最新更新