Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拦截点击,打一些电话,然后继续点击之前应该做的事情_Javascript_Jquery_Events_Triggers_Click - Fatal编程技术网

Javascript 拦截点击,打一些电话,然后继续点击之前应该做的事情

Javascript 拦截点击,打一些电话,然后继续点击之前应该做的事情,javascript,jquery,events,triggers,click,Javascript,Jquery,Events,Triggers,Click,大家好,我有这个任务要做: 有很多很多网页,里面有任何类型的元素,应该是输入、按钮、链接、复选框等等,有时候应该有一个javascript来处理元素行为,有时候是一个简单的链接 我制作了一个小javascript,它可以拦截对可点击元素的所有点击: $( document ).ready(function() { $('input[type=button], input[type=submit], input[type=checkbox], button, a').bind('click

大家好,我有这个任务要做:

有很多很多网页,里面有任何类型的元素,应该是输入、按钮、链接、复选框等等,有时候应该有一个javascript来处理元素行为,有时候是一个简单的
链接

我制作了一个小javascript,它可以拦截对可点击元素的所有点击:

$( document ).ready(function() {
    $('input[type=button], input[type=submit], input[type=checkbox], button, a').bind('click', function(evt, check) {

        if (typeof check == 'undefined'){
            evt.preventDefault();
                console.log("id:"+ evt.target.id+", class:"+evt.target.class+", name:"+evt.target.name);
                console.log (check);            
            $(evt.target).trigger('click', 'check');
        }
    });
});
逻辑是:当某个对象被点击时,我会截取它,默认它,进行跟踪调用,然后使用一个附加参数重新设置click by trigger事件,该参数不会再次触发跟踪调用

但这并不奏效。submit单击可以工作,但例如,单击复选框将选中它,但不能取消选中,链接被忽略,我跟踪它们(在console.log()中),但页面停留在那里,什么也没有发生

也许我猜错了。。。也许我应该进行跟踪调用,然后将
返回true
(//…跟踪调用…//)之类的内容绑定。完成(返回true)或者什么的


有人有什么建议吗?

如果您真的想等待单击事件,直到您完成跟踪呼叫,您可能可以这样做。下面是一个链接示例,但对于其他元素应该是相同的。本例中的click事件在2秒后触发,但在您的示例中,
link.click()
将位于ajax对象的
done()
方法中

<a href="http://www.google.com" id="myl">google</a>

var handled = {};
$("#myl").on('click', function(e) {
   var link = $(this)[0];
   if(!handled[link['id']]) {
      handled[link['id']] = true;
      e.preventDefault();
      e.stopPropagation();
      //simulate async ajax call
      window.setTimeout(function() {link.click();}, 2000);
   } else {
      //reset
      handled[link['id']] = false;
   }
});

您的跟踪呼叫是同步的还是异步的?如果是同步的,则无需重新触发事件或preventDefault(),因为只有在事件回调完成后才会触发默认操作;因此,对于一个简单的跟踪调用,我仍然不明白为什么需要防止默认并重新触发事件。为什么不在事件处理程序内部触发$.get调用呢?你需要检查“get”呼叫的结果吗?好吧,我的怀疑主要是让get呼叫有时间联系服务器,我不想启动呼叫,并截断它,因为有一个链接想转到其他地方。。。或是一个屈服或是别的什么。如果您认为只呆在处理程序中是安全的,那么,我会试试:Dok,我来看看SJAX(syncronousjavascript调用)。也许是这样,在这种情况下,我不能使用preventdefault,这是这里的主要问题。你得到的正是我试图创建的逻辑。同时,我已经做了一些非常类似的事情,所以我会接受答案,非常感谢。
var handled = {};
  $( document ).ready(function() {
    $('input[type=button], input[type=submit], input[type=checkbox], button, a').bind('click', function(evt) {
    if(!handled[evt.target.id]) {
      handled[evt.target.id] = true;
      evt.preventDefault();
      evt.stopPropagation();
      $.ajax({
         url: 'your URL',
         data: {"id" : evt.target.id, "class": evt.target.class, "name": evt.target.name},
         done: function() {
            evt.target.click();
         }
      });
    } else {
      handled[evt.target.id] = false;          
    }
});