【问题标题】:calling .trigger("click") that is in javascript code returned from an ajax call在 ajax 调用返回的 javascript 代码中调用 .trigger("click")
【发布时间】:2015-03-20 00:07:17
【问题描述】:

我想做的是从从 ajax 调用返回的视图中触发按钮的单击事件。此过程在 chrome 等 PC 浏览器中运行良好,但在移动浏览器中则不然。 (我同时使用 jquery 和 jquery mobile)。

(其中涉及更多代码,但为了清楚起见,我已将其删除)

我的 html 页面中有一个按钮。

 <input type="button" id="bt1" value=""  />

它在其他地方定义了一个 onclick 事件侦听器。

我有一个像这样调用 php 脚本的 ajax 调用:

 $.ajax({
        url: 'blah.php',
        type: 'get',
        data: {
            id : $('#field').val()
        },
        dataType: 'html',
        success: function (data) {
           $('#somediv').html(data);
        }
    });

它返回“数据”,这是一段带有内联 javascript 的 html。它包含以下代码:

<div>
<script type="text/javascript">
    $(document).ready(function () {
      $("#bt1").trigger("click");
     });
</script>
</div>

我注意到的是,在移动设备中使用时不会触发触发事件。但在电脑上工作正常。

在处理移动设备时,DOM 中是否存在不同之处,即如果对象在视图之外,它会阻止触发器(“点击”)工作?

【问题讨论】:

    标签: javascript jquery ajax jquery-mobile


    【解决方案1】:

    尝试在click 事件旁边添加touchstart 事件。

    $("#bt1").trigger("touchstart click");
    

    【讨论】:

    • 我试过了,但没用。事实上,我确实在系统的其他地方使用了trigger(click),它工作正常。在这种情况下,唯一的区别是我试图触发的按钮元素位于返回的视图之外。不过感谢您的帮助
    【解决方案2】:

    您可能需要在移动设备上实现触摸事件。看看这个 SO 答案:

    Understanding touch events

    如果您无法更改从服务器返回的内容,那么您可以监听点击事件并触发触摸事件。

    祝你好运, 迈克

    【讨论】:

      【解决方案3】:

      由于 javascript 代码和按钮元素是以编程方式创建的,因此无法找到按钮,请尝试:

      $(document).find('#bt1').trigger('click');
      

      $(document).find('#bt1').each(function(e) {
          e.trigger('click');
      }
      

      或者,更好:

      success: function (data) {
          $('#somediv').html(data).promise().done(){
             $('#bt1').trigger('click');
          });
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        • 2015-05-18
        • 2017-02-23
        相关资源
        最近更新 更多