我有一个调查,其中有许多文本输入取数值,每个输入都有一对递增/递减按钮。我有一个如下工作函数:
HTML:
<div class="text-input-wrapper">
<input type="text" />
<div class="buttons inc-dec">
<button class="increment">Increment</button>
<button class="decrement">Decrement</button>
</div>
</div>
function incDec(btnClass) {
var input = $(this).closest('.text-input-wrapper').find('input');
var inputVal = $(this).closest('.text-input-wrapper').find('input').val();
if ($(this).hasClass('increment')) {
if (inputVal.length == 0) {
($(input).val('1'));
}
else {
inputVal++;
$(input).val(inputVal);
}
} // increment
else if ($(this).hasClass('decrement')) {
if (inputVal.length == 0) {
($(input).val('0'));
}
else {
inputVal--;
$(input).val(inputVal);
}
} // decrement
return false;
} // function incDec
现在我需要使用UP&amp; amp;来启用递增和递减值。向下键;我接受了下面的尝试,但没有任何喜悦:
$(document).keydown( function(eventObject) {
// UP arrow
if(eventObject.which==38) {
var btnClass = "increment";
} else
// DOWN arrow
if(eventObject.which==40) {
var btnClass = "decrement";
}
incDec(btnClass);
我非常感谢有关如何使用向上/向下键启动增量/减量的一些说明,
非常感谢,
SVS
答案 0 :(得分:2)
您的问题是您的incDec
函数不是为了将类作为输入参数而设计的 - 它使用调用事件的对象(即按钮上的click事件)。
这有点像hacky,但是如下所示呢?您将单击处理程序分配给每个按钮,然后调用相关按钮的单击事件。
$( function ( ) {
$('button').click( incDec );
$('input').keydown( function(eventObject) {
// UP arrow
if(eventObject.which==38) {
var btnClass = "increment";
} else
// DOWN arrow
if(eventObject.which==40) {
var btnClass = "decrement";
}
// Invoke the click event for the inc/dec button inside the containing div.
$('button.'+btnClass, $(this).parent( )).click( );
});
});
这是一个有两个这样的盒子的jsfiddle。当您在文本框内使用向上/向下箭头键时,它会正确递增/递减。 http://jsfiddle.net/zJBEN/
答案 1 :(得分:1)
试试这个:
$(document).keypress( function(eventObject) {
var key = (eventObject.keyCode ? eventObject.keyCode : eventObject.which);
if(key==38) {
var btnClass = "increment";
} else
// DOWN arrow
if(key==40) {
var btnClass = "decrement";
}
incDec(btnClass);
});