对于特定设置值的更改,jQuery验证失败

时间:2013-04-11 10:05:42

标签: javascript jquery onchange

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

输入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">

我的 jQuery 代码 -

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 - &gt; http://jsfiddle.net/swapnesh/ktKE3/

小于100的值的测试通过但是对于大于或等于100的值则失败。

让我知道这种奇怪的验证行为以及我在逻辑上做错了什么。

3 个答案:

答案 0 :(得分:1)

“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);
  }
  });
});

答案 1 :(得分:1)

你正在比较错误的价值。 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);
  }
  });

答案 2 :(得分:1)

问题出在您的比较中,您将您的值与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);
  }
  });

});