拦截点击,进行一些操作,然后再次传播“点击”

时间:2014-02-18 13:31:29

标签: jquery events triggers

美好的一天。

今天有人要求我为数千个网页上的某些活动开发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
我忘记了什么......?提前谢谢。

3 个答案:

答案 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(...)