如何在没有用户交互的情况下自动触发

时间:2018-06-16 23:12:02

标签: javascript jquery

我试图通过使用(#td).trigger('点击')自动触发td元素。它有效,但我不希望用户实际点击td本身,我只是想让它自动化。我需要触发td元素来启动下一个事件。如何在不给用户触发元素的情况下使用JQuery或JS触发元素。这就是我现在所拥有的......

$(td4).trigger('click');
//will trigger td4 which eventually will trigger td5
$(td5).trigger('click');
//which will go on to td6 and so on

正如我之前所说,它有效。然而,用户可以绕过这些方法并直接进入td20,例如只需单击它即可。我希望他们经历一个自动化过程,他们必须按指定顺序浏览所有td。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:1)

首先,如果您不希望用户点击tds,那么我就没有看到点击处理程序和触发通过脚本点击的任何目的。

但是,既然你问过,下面是一种区分实际用户点击和通过代码触发的用户点击的方法。

你可以使用event.originalEvent.isTrusted标志检查用户是否点击了tds并相应地处理它,这是一支用于演示的笔Codepen demo



 $("tr > td").click(function(e){
      if(e.originalEvent && e.originalEvent.isTrusted) {
        console.log("User Click - Caught : " + e.originalEvent.isTrusted);
        e.preventDefault();
      } else {
        console.log("Clicked automatically "+ $(this).attr("id"));
        $(this).next().trigger("click");// click the next td
        
        // now trigger next td click
        // Do your stuff here
      }
    });
    


var autoClick = function(){
  $("#td1").trigger("click");
}

td {
  width:30px;
  height:30px;
  border:1px solid;
}

<table cellspacing="15">
  <tr>
    <td id="td1">td1</td>
    <td id="td2">td2</td>
    <td id="td3">td3</td>
  </tr>
</table>

<button onclick="autoClick()">Click Div Through Code</button>
&#13;
&#13;
&#13;

event.originalEvent.isTrusted是浏览器在用户点击某个元素时设置的标志,当脚本触发click事件时,它不会被设置。

答案 1 :(得分:0)

编写一个处理逻辑的函数,并通过$(document).ready(yourFn())调用它;

使用jQuery来定位td的想法让它迭代它们并调用每个绑定的事件处理程序是正确的吗?如果没有,请进一步澄清。

来自code pen以下的东西。您可以根据需要将事件类型替换为触发器参数,模糊,单击等。:

post_id