重新调整并选择更改事件中的输入框内容

时间:2018-06-28 08:13:41

标签: 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(/\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();

我如何实现预期的行为?还是不可能?

1 个答案:

答案 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);
});

https://jsfiddle.net/sgqv1ch2/