В HTML5 INPUT type='number'
пользователь может изменить значение, нажимая стрелки вверх / вниз, которые являются частью поля ВВОД. Пользователь может также щелкнуть в поле для фокусировки или для редактирования его содержимого.
Есть ли какой-нибудь простой способ различить эти два действия в триггере 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 работает безупречно до сих пор , за исключением , что при удалении фокуса из ПУНКТА триггер change
снова срабатывает. Я решил это с помощью триггера изменения низкого уровня, который останавливает распространение, если предыдущий вызов изменения был из mouseup
.