javascript - jQuery 插件内的单击事件在另一个元素上不起作用

标签 javascript jquery plugins event-handling onclicklistener

我在 stackoverflow 上找到了很多有关此主题的文章,但没有人针对我的具体问题提供解决方案。

我有一个 jQuery 插件,到目前为止运行良好。在该插件中,我添加了一些新的 DIV。另外,我想在这些新的 DIV 上添加一个点击事件监听器。像这样:

(function ($) {
  $.fn.myFunc = function(options) {

    // Options + Defaults
    var settings = $.extend({
      // Some options in here
    }, options);

    var controls = "\
      <div class='controls'>\
        <button class='btn-add-text'>Add Text</button>\
      </div>\
    ";

    $('.btn-add-text').click(function() {
      alert("Test");
    });

    $(this).after(controls);

    return this;
  };
})(jQuery);

我的第一个想法是,这是不可能的,因为在新的 div 实际上位于 DOM 内部之前调用了事件监听器,因此它无法工作。因此,我将 .click(func... block 移到插件代码之外,并将其放入 document.ready 函数中,如下所示:

$(document).ready(function() {
  $('.btn-add-text').click(function() {
    alert("Test");
  });
});

这对我来说也不起作用。这个问题有什么解决办法吗?

最佳答案

尝试使用更多变量来存储 html (jquery) 元素。

(function ($) {
  $.fn.myFunc = function(options) {

    // Options + Defaults
    var settings = $.extend({
      // Some options in here
    }, options);

    var button = $('<button class="btn-add-text">Add Text</button>');

    button.click(function() {
      alert("Test");
    });

    var controls = $('<div class="controls"></div>')
                   .append(button);

    $(this).after(controls);

    return this;
  };
})(jQuery);

您使用 $('.btn-add-text').click( ... ) 然后使用 $(this).after(controls 将此元素添加到 html 中)。所以jquery选择器函数无法在html中找到这个元素,因为它不在这里。

此外,您的概念也不正确,因为每次调用 myFunc 时,您都会在所有元素 .btn-add-text 上添加事件监听器,这可能会导致客户端 JavaScript 过载。仅将事件监听器添加到您当前正在创建的元素。

关于javascript - jQuery 插件内的单击事件在另一个元素上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896290/

相关文章:

javascript - React 如何以 `this` 不引用类本身的方式调用 ES6 类的渲染函数?

JavaScript If else 语句

java - Eclipse插件: Add new menu into SVN > Team pop-up menu

angular - 使用 Angular CLI 的 Google Chrome 扩展卡在 "loading"

javascript - Laravel 4 中的 Jquery Ajax - NotFoundHttpException

javascript - 如何删除 JavaScript 中最后一个匹配的正则表达式模式

javascript - HttpRequestHandler : Sending a pdf file in response

javascript - ng-focus 和 ng-blur 事件不会在 Angularjs 中触发

php - Jquery 在 Yii2 中不工作

android - 在 Android 的 PhoneGap 上播放 MIDI 文件