美好的一天。
今天有人要求我为数千个网页上的某些活动开发javascript(jquery)跟踪。
我必须拦截点击元素的一些点击,做一些调用,然后让页面继续一如既往地工作。 例如,假设在页面上有一些文本输入,几个复选框,一些链接和一个提交按钮。
让我们暂时忽略提交按钮。我稍后会处理它。我认为这样的事情:
$( document ).ready(function() {
$('input[type=button], input[type=submit], input[type=checkbox], button, a').bind('click', function(evt, check) {
//evt.preventDefault();
console.log("id:"+ evt.target.id+", class:"+evt.target.class+", name:"+evt.target.name);
console.log (check);
evt.target.trigger('click', 'check');
});
});
我不得不使用jquery 1.5,而且无法再更新。
我猜这可能是向前的,但上面的代码会返回此错误:
id:terms, class:undefined, name:terms
undefined //this is ok, the check variable will be used to distinguish real clicks from triggered ones.
Uncaught TypeError:
Object #<HTMLInputElement> has no method 'trigger'
(anonymous function)
E jquery-1.5.min.js
d.event.handle jquery-1.5.min.js
j.handle.l jquery-1.5.min.js
我忘记了什么......?提前谢谢。
答案 0 :(得分:2)
$(evt.target).trigger
evt.target由它自己没有jQuery包装器。
以下一行显而易见:
Object #<HTMLInputElement> has no method 'trigger'
其中表示您将HTMLInputElement作为对象而不是jQuery对象。
此外,升级您的jQuery版本。 1.5非常过时,你缺少表现和关键功能。
答案 1 :(得分:1)
如果可以的话,绝对升级jQuery。
我认为mousedown
听众可能适合你:
jQuery最新1.x分支
$('button, input[type="checkbox"]').on('mousedown', function(e){
alert(e.type);
});
/* uncomment this and comment the top to see the difference
$('button, input[type="checkbox"]').on('mouseup', function(e){
alert(+e.type);
});
*/
<强> HTML 强>
<button>Click Me</button>
<br>
<input type="checkbox">
<强> JSfiddle 强>
您无法同时使用mouseup
,因为当您单击此示例中的警告框时它会触发。
我认为你应该在mousedown上实现ASYNC AJAX调用没有问题,然后如果你愿意,可以使用mouseup触发另一个调用。我想如果你想计算用户在发布之前持有鼠标的毫秒数,这将非常有用。
答案 2 :(得分:0)
将evt.target
包装到jQuery对象中,如$(evt.target).trigger(...)