我有3个输入框(id="qprice1"
,id="qprice2"
,id="prev_value"
)。如果#qprice2
中的值小于#qprice1
,则需要重新聚焦并选择(突出显示)#price2
的所有内容。但它会继续关注下一个元素。
到目前为止,这是我的代码
$('body').on('change', '#qprice2', function(e) {
e.preventDefault();
var val1 = parseInt($('#qprice1').val().replace(/\D/g, ''));
var val2 = parseInt($(this).val().replace(/\D/g, ''));
if (val2 < val1) {
alert('no reduction allowed!');
$(this).val($('#prev_value'));
$(this).focus().select();
}
});
使用超时也不起作用:
setTimeout(function() { $(this).focus().select(); }, 100);
我也首先尝试着重于另一个元素,但是效果不佳
$('#qprice1').focus();
$(this).focus().select();
但是当我尝试聚焦并选择一个非自身的输入框时,它可以正常工作:
$('#another_input').val('2000').focus().select();
我如何实现预期的行为?还是不可能?
答案 0 :(得分:0)
似乎您只需要将事件处理程序附加到输入,而不是附加到正文。
// handle click and add class
$('#qprice2').on('change keyup', function(e) {
var $t = $(this);
e.preventDefault();
clearTimeout(myvar);
var myvar = setTimeout(function() {
var val1 = parseInt($('#qprice1').val().replace(/\D/g, ''));
var val2 = parseInt($t.val().replace(/\D/g, ''));
if (val2 < val1) {
$t.focus().val($('#prev_value').val()).select();
}
}, 1500);
});