Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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 jQuery,仅当用户自己更改输入时才更改事件_Javascript_Jquery_Event Handling - Fatal编程技术网

Javascript jQuery,仅当用户自己更改输入时才更改事件

Javascript jQuery,仅当用户自己更改输入时才更改事件,javascript,jquery,event-handling,Javascript,Jquery,Event Handling,我们可以检测用户是否更改了某些内容: $('#item').change(function() { alert('changed!'); }); 遗憾的是,有时我需要人为地调用它:$('#item').change(),但在本例中,它也被视为“changed”。有没有办法区分用户活动和手动活动?jQuery事件处理程序返回的第一个参数是事件对象: $('#item').change(function(e) { console.log(e); // The event objec

我们可以检测用户是否更改了某些内容:

$('#item').change(function() { 
    alert('changed!');
});

遗憾的是,有时我需要人为地调用它:
$('#item').change()
,但在本例中,它也被视为“changed”。有没有办法区分用户活动和手动活动?

jQuery事件处理程序返回的第一个参数是事件对象:

$('#item').change(function(e) { 
  console.log(e); // The event object
});
我通常区分用户触发事件和代码触发事件的方式是,用户触发事件附加了
originalEvent
属性。我不知道这是否是最好的方法,但我会这样做:

$('#item').change(function(e) { 
  if (e.originalEvent) {
    // user-triggered event
  }
  else {
    // code-triggered event
  }
});

例子 在下面的示例中键入
input
元素,然后取消聚焦该元素。您将收到一条警告,提示“用户触发”。单击按钮调用代码触发的更改。您将收到一条警告,提示“代码已触发”

$('#item')。更改(函数(e){
如果(如原始事件){
警报(“用户触发的”)
}
否则{
警报(“代码触发”)
}
});
$('button')。在('click',function()上{
$(“#项”).change();
});


单击此处触发更改
当用户触发事件时,回调的事件参数将包含原始事件键,因此您可以执行以下操作:

$('#item').change(function(e){ if (e.originalEvent){ alert('Changed by user'); } // Place common code here }); $(“#项”)。更改(功能(e){ 如果(如原始事件){ 警报(“由用户更改”); } //在这里放置公共代码 });
与原始事件不同的方法应该是使用事件参数:

$('#item').change(function(event, who) {
    if(who === "machine")
        alert('machine!');
    else
        alert('human!');
});

$("#item").trigger("change", ["machine"]);

如果是文本输入,则可以使用,如下所示:
$(“#item”).keypress(function(){alert('changed!');})
对于clicky输入,可以使用click处理程序:如果是文本输入,可以使用如下:
$(“#项”).on(“click”,function(){alert('changed!');})
@Niek FWIW:
按键
事件不会在你粘贴东西时触发(通过键盘或鼠标)。@FreddySidauruk我真的不知道你所说的“多级组用户”是什么意思。。。你确定你在评论正确的问题吗?好的,等等,我正在努力让我的英语变得易于理解,关于的问题是检测是否有用户,这意味着有级别为admin、employee等的用户。我的问题是,如果在同一时间有级别为admin和employee的用户单击,它是否仍在工作?注:考虑事项click@FreddySidauruk对不起,这与这个问题或这个答案完全无关。javascript是客户端代码,与用户管理无关。因此,它当然适用于所有能够访问此代码的人。谢谢,它救了我的命,使我不再需要进一步破解代码库。