【问题标题】:jquery validate depends rulejquery验证依赖规则
【发布时间】:2013-11-28 04:20:13
【问题描述】:

我有一条规则,其格式似乎类似于this thread 中的答案,但没有正确验证。如果我注释掉这条规则,验证就会在表单的其余部分正确执行。我发现的其他语法错误导致了相同的结果,所以我希望这里有一个语法错误,但如果我能发现它就会被删除。

规则是

freq: {
    required: {
        depends: {function(element){
            return $('#freqBand').val().length > 0 &&
            $('#freqBand').val() != "24GHz");
            }
        }
    }
},

我希望如果输入字段 freqBand(选择输入)值不是“24GHz”或什么都不是,那么 freq 字段是必需的。

我只是在学习jquery,所以它可能是一个真正的额头。

编辑 11/28

我进行了更多故障排除,发现 $('#freqBand').val() 未定义。

在 HTML 中可以找到

<select  name="freqBand" tabindex="6">
        <option value="" label="&ndash;Choose&ndash;" >&ndash;Choose&ndash;</option>
        <option value="27MHz" label="27 MHz" >27 MHz</option>
        <option value="50MHz" label="50 MHz" >50 MHz</option>
        <option value="75MHz" label="75 MHz" >75 MHz</option>
        <option value="24GHz" label="2.4 GHz" >2.4 GHz</option>
</select>

查询验证文档说选择元素的正确语法应该是

$("select.freqBand option:selected").val()

但这也解析为未定义。这些添加的信息是否有助于某人帮助我?

【问题讨论】:

  • 你有语法问题试试freq: { required: { depends: function (element) { return $('#freqBand').val().length &gt; 0 &amp;&amp; $('#freqBand').val() != "24GHz"); } }

标签: jquery jquery-validate depends


【解决方案1】:

我知道这是一篇旧帖子,但我目前遇到了类似的问题。也就是说,我担心将 id 选择器 # 用于名称属性。根据我的发现,id 选择器绝不可用于名称属性,而应通过选择器[name='name']

来处理名称属性

见:Name vs Id attribute in HTML

这可能无法完全解决您的问题,但绝对是现在而不是以后需要注意的事情。再说一次,我知道已经一年了。另外,如果我对名称属性的 id 选择器是正确的,那么您的代码的一个大问题已经解决了。

除此之外,Joke_Sense 的所有信息仍然真实且相关。

哦,我是 StackOverflow 的新手(虽然我还没有注册过我不认为的帐户)。如果有人可以给我反馈,这个回答是否......好吧,这只是一个旁白。我只是要求建设性的批评。我拥有不想自欺欺人的知识和诀窍。

【讨论】:

  • 嘿,aljo。首先...哇,斜体消息让新用户感到惊讶。我看到你的答案的唯一问题是它是一个评论而不是一个答案。我知道您还不能发表评论,有时可能会很麻烦,但是这种答案不是答案,尤其是对于 Joke_Sense 的当前答案。但是保持开放接受批评的工作很棒:)。
【解决方案2】:

依赖后缺少colon。依赖后的额外braces 是不必要的。试试这个:

freq: {
required: {
    depends: function(element){ //Missing colon here and no opening braces required
        return ($('#freqBand').val().length > 0 &&
        $('#freqBand').val() != "24GHz")); 
        }
     }
},

【讨论】:

  • 插入了冒号,但并没有改变结果。
  • 你是否删除了依赖后多余的左大括号,它是相应的右大括号??
  • 我现在做了,但没有改变。
  • 我猜你需要在freq之前添加rules
  • 它存在,如果我消除它,还有一些其他的规则可以正常工作。我不想用不相关的东西把发布的代码弄得乱七八糟。
【解决方案3】:

这是一个旧线程,可能已经解决了,但我想我会试一试。

我看到的最明显的问题是您的选择输入没有分配给它的 ID,但您在依赖语句中调用了一个 ID:$('#freqBand').val()。您需要向选择添加一个 ID,以便以这种方式引用元素。

另请注意,您的验证语句也缺少括号。在“24GHz”之后你有一个结束,但你没有一个开始,这也可能导致问题。

另外,不确定您为什么使用长度。我认为您可能希望确保该值中包含某些内容,因此我可能会稍微修改一下depends 语句。

无论如何,所有这三个工作(使用版本 1.13.1 验证):

freq: {
    required: { 
        depends: function(element){
            return ($("#freqBand").val() != "" &&  $("#freqBand").val() != "24GHz")
        } 
    } 
}

freq: {
    required: { 
        depends: function(element){
            return ($("select[name=freqBand]").val() != "" &&  $("select[name=freqBand]").val() != "24GHz")
        } 
    } 
}

freq: {
    required: { 
        depends: function(element){
            return ( ($("select[name=freqBand]").val().length > 0) &&  $("select[name=freqBand]").val() != "24GHz")
        } 
    } 
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2011-04-27
    • 2017-08-26
    相关资源
    最近更新 更多