jQuery,仅当用户自己更改输入时更改事件
jQuery, change-event ONLY when user himself changes an input
我们可以检测用户是否更改了某些内容:
$('#item').change(function() {
alert('changed!');
});
可悲的是,有时我需要人为地称呼它:$('#item').change()
但在这种情况下,它也被视为"已更改"。有没有办法区分用户活动与手动活动?
从 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
元素,然后取消聚焦该元素。您将收到一条提醒,指出"user-triggered"
。单击该按钮可调用代码触发的更改。您将收到一条提醒,指出"code-triggered"
。
$('#item').change(function(e) {
if (e.originalEvent) {
alert('user-triggered')
}
else {
alert('code-triggered')
}
});
$('button').on('click', function() {
$('#item').change();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type=text id=item />
<button>Click here to trigger change</button>
与originalEvent
不同的方法应该是使用事件参数:
$('#item').change(function(event, who) {
if(who === "machine")
alert('machine!');
else
alert('human!');
});
$("#item").trigger("change", ["machine"]);
当用户触发事件时,回调的事件参数将包含一个 originalEvent 键,因此您可以执行以下操作:
$('#item').change(function(e){ if (e.originalEvent){ 警报("由用户更改"); } 在此处放置通用代码 });
相关文章:
- 如何在多表单的输入框中使用输入事件javascript
- 鼠标输入事件上的jQuery延迟出现问题
- 为什么ng模式获胜't对来自非用户输入事件的更改进行正确验证
- 鼠标输入事件未触发
- 为什么“输入”事件不会在文件输入上触发,但“更改”事件会触发
- 范围滑块输入事件在 IE 10 中未触发
- 使用 jQuery 触发输入事件
- 输入事件侦听器更新自按钮
- FF 鼠标离开/鼠标输入事件
- 如何在没有 jQuery 的情况下以编程方式触发“输入”事件
- 如何从“输入”事件中获取最后一件事输入
- jQuery 屏幕键盘的输入事件
- jQuery:单击时,防止鼠标输入事件
- “输入”事件的多个事件侦听器
- 延迟鼠标输入事件,如果鼠标在元素内引发事件
- 正在检测换档键输入事件
- 调用了两次HTML输入事件
- 更改占位符会触发IE 10中的输入事件
- jQuery animate无法在输入事件侦听器中工作
- 使用JavaScript设置输入事件