Javascript / jquery如何区分触发和用户点击?

时间:2012-06-07 14:23:37

标签: jquery triggers click

这个问题看起来很像 In Jquery, how can I tell between a programatic and user click?

但我无法得到它,我的代码

<div class="sample_class" onclick="sample_fn(arg1,arg2,arg3,arg4, e);" ></div>
<div class="trigger_class" onclick="trigger_fn()></div>


function sample_fn(arg1,arg2,arg3,arg4, e){
    console.log(e) ;
    console.log(e.isTrigger);
    console.log(e.hasOwnProperty('originalEvent'));
}


function trigger_fn(){
    $(".sample_class").trigger("click")
}

点击div.sample_class我进入控制台 宾语 未定义 假

点击div.tigger_class我进入控制台同样的事情 宾语 未定义 假

我无法区分这两次点击。 提前致谢

1 个答案:

答案 0 :(得分:6)

更新:从jQuery 1.7+开始,事件对象(下面代码中的e)对象将包含一个名为e.isTrigger的属性true如果事件被触发并且未触发则未触发;这是未记录的,因此在使用之前请检查此(demo)。如果使用旧版本的jQuery,请使用以下代码。


将标志传递给您的函数可能更容易。这是一个demo

HTML

<button>Trigger a click below</button>

<div id="test">Click Me</div>​

脚本

​$('#test').click(function(e, triggered){
    var msg = (triggered) ? ', triggered' : '';
    console.log('clicked' + msg);
});​​

$('button').click(function(){
    // pass a true flag to the click function to indicate
    // it's been triggered
    $('#test').trigger('click', true);
});

更新:数据属性可以包含有效的JSON,它会自动转换为对象(demo):

<div class="test" data-args='{ "quantity": 1, "type": "pizza", "extra1": "peperoni", "extra2": "cheese", "extra3": "cheesy bread" }'>Click Me</div>

请注意,data-arg使用单引号来包含JSON,但内部的JSON必须在每个键和值周围使用双引号(除非它是数字)。

然后使用数据方法提取信息:

var args = $(this).data('args');

或者,您可以为每个参数(demo)创建单独的数据属性:

<div class="test" data-quantity="1" data-type="pizza" data-extra1="peperoni" data-extra2="cheese" data-extra3="cheesy bread">Click Me</div>

然后使用收集元素中的所有数据,如下所示:

var args = $(this).data();