控制输入​​数字段最小/最大

时间:2017-12-13 04:38:00

标签: javascript jquery html5 range limit

我有两个输入字段代表一个时间范围(秒),我需要这样做,因此“from / min”字段不能高于“to / max”,反之亦然。

到目前为止,我得到了这个:

jQuery(document).ready(function(){
	jQuery('#from').on( 'input', function( ) {
			if( parseInt( jQuery('#from').val() ) >= parseInt( jQuery('#to').val() ) ) jQuery('#from').val( parseInt( jQuery('#from').val() ) - 1 );
	});
  
	jQuery('#to').on( 'input', function( ) {
			if( parseInt( jQuery('#to').val() ) <= parseInt( jQuery('#from').val() ) ) jQuery('#to').val( parseInt( jQuery('#to').val() ) + 1 );
	});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
From: <input type="number" min="10" step="1" id="from" value="60"><br />
To: <input type="number" min="11" step="1" id="to" value="120">

使用字段或键盘箭头时工作正常,但我仍然可以在其上键入任何数字/ + / - 并低于/高于其他字段。

我正在使用:

jQuery('#from, #to').on( 'keypress', function( e ) {
    e.preventDefault();
});

目前阻止打字作为解决方法,但我希望能够输入一个数字,同时仍然保持不能低于/高于其他字段的限制

我该怎么做?

1 个答案:

答案 0 :(得分:2)

当符合您的条件时,您应该致电style,以防止它(例如)增加值。在这里,我绑定到jQuery自定义preventDefault事件,而不是让它也听取input事件。

paste
jQuery(function ($) {
  $('#from').on('input', function (e) {
    var from = parseInt($(this).val(), 10)
    var to = parseInt($('#to').val(), 10)

    if (from >= to) {
      e.preventDefault()
      $(this).val(to -1)
    }
  })
  
  $('#to').on('input', function (e) {
    var from = parseInt($('#from').val(), 10)
    var to = parseInt($(this).val(), 10)
    
    if (to <= from) {
      e.preventDefault()
      $(this).val(from + 1)
    }
  })
});