【问题标题】:jQuery Validation doesn't highlight my select field on errorjQuery Validation 不会在错误时突出显示我的选择字段
【发布时间】:2010-01-26 19:46:13
【问题描述】:

我正在尝试应用下拉验证(因此,如果该值等于 <select><option value="0"> 的 0),那么它会应用黄色背景色,就像它对我的其余输入字段所做的那样。这是我的代码:

<script src="jq.js"></script>
<script src="validate.js"></script>
<script>
jQuery.validator.addMethod(
  "selectNone",
  function(value, element) {
    if (element.value == "0")
    {
   element.css({"border" : "1px solid #f00", "background-color" : "#ffffcb"});
      return false;
    }
    else return true;
  },
  "Please select an option."
);

$(document).ready(function(){
 $(".form_validate").validate({
  onfocusout: true,
  rules: {
   zip: {
     required: true,
     number: true
   },
   phone: {
    required: true,
    number: true
   },
   select_debt: {
    required: true,
    selectNone: true
   },
   select_state: {
    required: true,
    selectNone: true
   }
    }

 });
 $("input.required, .select").blur(function() {
  var val = $(this).val();
  if (val == "" || val == "0") {
   $(this).css({"border" : "1px solid #f00", "background-color" : "#ffffcb"});
  } else {
   $(this).css({"border" : "1px solid #ccc", "background-color" : "#fff"});
  }
 });
 function isValidPhoneDigits(val) {
  var intRegex = /^\d+$/;
  var floatRegex = /^((\d+(\.\d *)?)|((\d*\.)?\d+))$/;

  if(intRegex.test(val) || floatRegex.test(val)) {
     return true;
  } else {return false}

  if(intRegex.test(val) || floatRegex.test(val)) {
   return true;
  } else {return false}
 }
 $(".zip").blur(function(){
  if ( isValidPhoneDigits($(this).val()) && $(this).val().length == 5 ) {
   $(this).css({"border" : "1px solid #ccc", "background-color" : "#fff"});
   } else {
   $(this).css({"border" : "1px solid #f00", "background-color" : "#ffffcb"});
   }
 });
 $("a.popup").click(function(){
  var href_link = $(this).attr("href");
  window.open(href_link,"popup", "menubar=no,width=430,height=360,toolbar=no,status=no,directories=no,scrollbars=yes");
  return false;
 });
});
</script>

我在顶部包含了 jquery 和验证。我还声明了一个名为 selectNone 的新验证方法,它应该检查值是否为 0 并将 bg 颜色设置为黄色。

如果有帮助,这是我的 html:

<form class="form_validate">
<table cellpadding="0" cellspacing="0" class="table">
 <tr>
     <td class="al_r">
         First Name
        </td>
        <td>
         <input value="" type="text" name="firstname" class="required" />
        </td>
    </tr>
    <tr>
     <td class="al_r">Last Name</td>
        <td><input value="" type="text" name="lastname" class="required" /></td>
    </tr>
    <tr>
     <td class="al_r">Address</td>
        <td><input value="" type="text" name="address" class="required" /></td>
    </tr>
    <tr>
     <td class="al_r">Zip</td>
        <td><input value="" type="text" id="zip" name="zip" class="required zip" /></td>
    </tr>
    <tr>
     <td class="al_r">City</td>
        <td><input value="" type="text" name="city" class="required" /></td>
    </tr>
    <tr>
     <td class="al_r">State</td>
        <td><select class="required select" name="select_state"><option value="">Select State</option><option value="1">California</option><option value="2">Alabama</option></select></td>
    </tr>
    <tr>
     <td class="al_r">Email</td>
        <td><input value="" type="text" name="email" class="required email" /></td>
    </tr>
    <tr>
     <td class="al_r">Phone</td>
        <td><input value="" type="text" name="phone" class="required" /></td>
    </tr>
    <tr>
     <td class="al_r">Approximate Credit Card Debt</td>
        <td><select class="required select"  name="select_debt">
          <option value="">Please choose debt amount</option>
          <option value="1">$0-$9,999</option>
                <option value="2">$10,000-$19,999</option>
                <option value="2">$20,000-$29,999</option>
                <option value="2">$30,000-$39,999</option>
                <option value="2">$40,000-$49,999</option>
                <option value="2">$50,000+</option>
            </select></td>
    </tr>
    <tr>
     <td colspan="2">
         <input type="image" src="images/check_elig.gif" height="38" width="300" style="border:none; height:38px; margin-left:20px;" />
        </td>
    </tr>
    <tr>
     <td colspan="2" class="al_r small">
         May not be available in your state.
        </td>
    </tr>
</table>
</form>

在此先感谢您提供有关它为什么不起作用的任何帮助。

【问题讨论】:

  • 如果你自己解决了,为什么不在这里发布一个简短的解决方案(并接受它以获得徽章)

标签: jquery select jquery-validate


【解决方案1】:

我们通常通过为input 元素放置样式来告诉jQuery 突出显示错误字段,例如:

input.error {
    border: 2px solid #CC0000
}

确保您也为选择元素添加样式,例如:

select.error {
    border: 2px solid #CC0000
}

【讨论】:

    【解决方案2】:

    你有

    <option value="">Please choose debt amount</option>
    

    但您正在测试value == "0",因此您需要更改&lt;option&gt; 值或selectNone 方法的逻辑。

    【讨论】:

    • 这不是问题,我改变了它,仍然在同一条船上:(
    • 使用 Firebug 或在 selectNone 方法的开头添加警报,以查看验证插件是否正在调用它。此外,您似乎在同一个对象上使用 .value 和 .css 。如果它是一个 jQuery 对象,那么只有 .css 可以工作并且 .value 应该会产生一个 JavaScript 错误。如果它是一个 DOM 对象,那么 .css 将不起作用并会产生 JavaScript 错误。
    • @Angel,那么请解释一下这个问题。如果您想与 jQuery Validate 插件一起使用,这绝对是您必须设置 select 项目的方式。否则将无法正常工作。
    【解决方案3】:

    我猜这与 &lt;select&gt; 标签有时会被验证器遗漏的事实有关,因为它们不属于正常的 &lt;input&gt; 标签。确保验证器正在寻找要验证的&lt;select&gt; 标签。

    【讨论】:

      【解决方案4】:

      select.error 不起作用,因为 select 实际上被 jQuery Mobile 隐藏了。相反,有一个包装 DIV 实现了一个不错的选择。由于这一点,我们可以很好地设置它的样式,但另一方面,这会产生这个错误样式问题。

      试试这个解决方案jQuery Validate - Add Error Class to Parent Div。似乎工作正常。您将不得不编写 JS 代码,因为您可能想要使用 jQuery 验证并且不会将错误类分配给选择包装器...

      德米特里·克雷辛,Web development

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-30
        • 2010-12-25
        • 2011-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多