Javascript 拦截点击,打一些电话,然后继续点击之前应该做的事情
大家好,我有这个任务要做: 有很多很多网页,里面有任何类型的元素,应该是输入、按钮、链接、复选框等等,有时候应该有一个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,它可以拦截对可点击元素的所有点击:
$( 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;
}
});