Jquery 在更改事件内重新聚焦并选择inputbox内容
我有3个输入框(Jquery 在更改事件内重新聚焦并选择inputbox内容,jquery,event-handling,Jquery,Event Handling,我有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(
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();
}
});
我也试着先把注意力集中到另一个元素上,但效果不太好
$('#qprice1').focus();
$(this).focus().select();
但是,当我尝试聚焦并选择一个输入框而不是它本身时,效果很好:
$('#another_input').val('2000').focus().select();
我如何实现预期的行为?还是不可能?似乎只需要将事件处理程序附加到输入,而不是正文
// 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);
});
//句柄单击并添加类
$('#qprice2')。在('change keyup',函数(e)上{
var$t=$(本);
e、 预防默认值();
清除超时(myvar);
var myvar=setTimeout(函数(){
var val1=parseInt($('#qprice1').val().replace(/\D/g');
var val2=parseInt($t.val().replace(/\D/g');
if(val2
仍然没有突出显示
#qprice2
的内容。。它只会改变值。@dapidmini奇怪,它会在小提琴上为我突出显示它。你用的是什么浏览器?你也可以共享元素的html和css吗?这可能说明了问题所在。我正在windows pro 64位上使用mozilla firefox版本60.0.2。我在同一个浏览器上打开了你的JSFIDLE。@dapidmini:我已经更新了我的FIDLE,并将其分叉成一个新的url。基本上,它会查找更改和键控,等待1.5秒,然后测试/更改。我也更新了我原来的帖子。
// 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);
});