jQuery验证在更改特定的一组值时失败

jQuery validation fails on change for a specific set values

本文关键字:一组 失败 验证 jQuery      更新时间:2023-09-26

我在检查学生标记输入字段的标记时遇到了一个奇怪的验证错误。

输入id保持最大标记以与输入值进行比较(在当前情况下为35)。因此,如果用户输入的值小于35或35,则可以接受,但不大于35。但在当前的情况下,它打破了100和更大的值。

保持简单和简短,我的HTML是这样的-

<input type="text" value="30" id="studentname[98989898][marks-35_compid-1_subid-12]" name="studentname[98989898][marks-35_compid-1_subid-12]" style="width:50px;text-align:center">

My jQuery code -

jQuery(document).ready(function() {
      jQuery("input[type='text']").on('change', function(event) {
      var colId = event.target.id;
      var maxMarksSplit=colId.split("marks-");
      var maxMarks = maxMarksSplit[1].split("_compid"); 
      alert("Max marks " + maxMarks[0] );
      if( jQuery(this).val() > maxMarks[0] )
      {
      alert("Please check your value!" );
      jQuery(this).val(0);
      }
      });
});

工作小提琴DEMO -> http://jsfiddle.net/swapnesh/ktKE3/

小于100的测试通过,大于或等于100的测试失败。

让我知道这个奇怪的验证行为和我在逻辑上做错了什么

"parseFloat"可能有帮助

试试这个

jQuery(document).ready(function() {
  jQuery("input[type='text']").on('change', function(event) {
  var colId = event.target.id;
  var maxMarksSplit=colId.split("marks-");
  var maxMarks = maxMarksSplit[1].split("_compid"); 
  alert("Max marks " + maxMarks[0] );
  if( parseFloat(jQuery(this).val()) > parseFloat(maxMarks))
  {
  alert("Please check your value!" );
  jQuery(this).val(0);
  }
  });
});

您正在比较错误的值。maxMarks是拆分数组,你要与maxMarks[0]比较。

此外,您还需要解析输入,因为它们都将作为字符串提取:

  jQuery("input[type='text']").on('change', function(event) {
  var colId = event.target.id;
  var maxMarksSplit=colId.split("marks-");
  var maxMarks = maxMarksSplit[1].split("_compid"); 
  alert("Max marks " + maxMarks[0] );
  if( parseInt(jQuery(this).val()) + parseInt(maxMarks[0]) )
  {
      alert("Please check your value!" );
      jQuery(this).val(0);
  }
  });

问题在于你的比较,你比较你的值与maxMarks而不是maxMarks[0]

jQuery(document).ready(function() {
  jQuery("input[type='text']").on('change', function(event) {
  var colId = event.target.id;
  var maxMarksSplit=colId.split("marks-");
  var maxMarks = maxMarksSplit[1].split("_compid"); 
  alert("Max marks " + maxMarks[0] );
  if( jQuery(this).val() > parseInt(maxMarks[0]) ) // Here the modification
  {
  alert("Please check your value!" );
  jQuery(this).val(0);
  }
  });

});