【发布时间】:2011-11-08 06:14:20
【问题描述】:
在 HTML5 INPUT type='number' 中,用户可以通过单击作为 INPUT 框一部分的向上/向下箭头来更改值。用户还可以单击框以获得焦点或编辑其内容。
有什么简单的方法可以区分click 触发器中的这两个活动吗?
来自@cvsguimaraes 的回答,更好地证明了理论。
使用他的方法,这是我完成的(?)版本。目的:确保在使用 +/- 更改数据时调用常规 change 触发器。
// input/mouseup triggers to call change from +/- mouse clicks
// want to wait 500ms before calling change in case successive clicks
render.inputCh = false;
render.inputCt = 0;
render.inputFn = function(e) {
render.inputCh = true;
}
render.mouseupFn = function(e) {
if( render.inputCh ) {
render.inputCh = false;
render.inputCt++;
setTimeout( next, 500 );
}
function next() {
render.inputCt--;
if( render.inputCt ) return;
var change = document.createEvent("Event");
change.initEvent('change',true,true);
e.target.dispatchEvent(change);
}
}
// using input/mouseup triggers
document.getElementById('number').addListener('input',render.inputFn,true);
document.getElementById('number').addListener('mouseup',render.mouseuptFn,true);
// normal change trigger - will be called normally and via +/- mouse click
document.getElementById('number').addListener('change',changeFn,false);
到目前为止,在 chrome 上它工作得非常完美除了,当您从 ITEM 移除焦点时,change 触发器将再次启动。如果先前的更改调用来自mouseup,我通过使用停止传播的低级别更改触发器解决了这个问题。
【问题讨论】:
标签: javascript html input click