Jquery 在更改事件内重新聚焦并选择inputbox内容

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(

我有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();
  }
});
我也试着先把注意力集中到另一个元素上,但效果不太好

$('#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);
});