【问题标题】:Send click event on button loaded dynamically在动态加载的按钮上发送点击事件
【发布时间】:2015-04-05 14:15:24
【问题描述】:

所以这与我在该主题上找到的所有帖子略有不同。我有一个通过 Jquery 动态加载的按钮,我保存了这个按钮的选择器,稍后在我的代码中我需要发送一个点击事件(模拟某人点击按钮)现在通常我会使用 $('#myID').click(); 这会发出咔嗒声。但是由于我的按钮是动态加载的,所以这不起作用。现在我不需要处理 onclick 事件。我可以使用

$(document).on('click', '#myId',function(e){}); 

为此。我需要实际发送点击事件。我试过了

.click();
.on('click);
.onClick();
.trigger('click');

有什么想法吗?

【问题讨论】:

  • 无论元素是静态加载还是动态加载,触发事件的工作方式应该相同。重要的是当您执行选择时该元素就在那里。
  • 只要确保在元素创建后触发点击
  • 确保在创建元素后调用$("#myId") - 不要尝试将其保存在更早的变量中。
  • 你是说保存 jQuery 对象(不是选择器)不起作用?显然,您需要最近加载的对象(如果按钮以某种方式刷新/重新加载,则保存的对象不再有效)但如果您拥有它,触发器应该可以工作。也不能使用 on 函数触发事件。
  • 请显示实际代码。您可能在获取 ID 时做错了什么。也许您有重复的 ID?我们所能做的就是猜测,直到我们看到你做错了什么。

标签: javascript jquery html dom


【解决方案1】:

如果足够简单,您还可以将单击按钮时希望发生的代码分解为一个函数,而不是尝试触发点击事件,只需触发按钮通常触发的函数。

【讨论】:

    【解决方案2】:

    通过使用setTimeout() 一次又一次地调用该函数,您实际上是在轮询元素,直到它实际存在,也就是您触发点击事件时。

    // Wait for everything in the document to be loaded
    jQuery(document).ready(function() {
        // Make the initial call to the function
        fire_click('#myID');
    
        // This function tries to find the button, and if it can't
        // find it, it calls itself again in 50 ms.
        function fire_click(selector) {
            elem = jQuery(selector);
    
            if (elem.length == 0)
                setTimeout(fire_click, 50);
            else
                elem.click();
        }
    });
    

    更好的解决方案是在按钮加载时触发回调函数。然后,此回调函数可以触发按钮上的单击事件,因为仅当按钮实际存在时才会调用回调函数。一般来说,尽可能避免轮询信息是个好主意,因此这将被认为是更好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多