【问题标题】:If statement returns true though only one of several conditions are met (jQuery)尽管仅满足几个条件之一,但如果语句返回 true (jQuery)
【发布时间】:2012-02-17 16:47:59
【问题描述】:

如果在提交之前未回答任何可选单选按钮,我想通知用户回答表单(以确保它们已被有意跳过)。 我的问题是,虽然我设置了一个带有多个条件的 if 语句,但当满足任何一个条件而不是满足所有条件时,if 语句返回 true。我正在使用 jQuery 1.7.1。

Javascript:

$("#optmsg").show();
function updateFormEnabledOpt() {
if (verifyOpt()) {
    $("#optmsg").hide();
} else {
    $("#optmsg").show();
}
}

function verifyOpt() {
if ($("#formidable input:radio[name='q11']:checked").val() !== 'undefined' && $("#formidable input:radio[name='q12']:checked").val() !== 'undefined' && $("#formidable input:radio[name='q13']:checked").val() !== 'undefined') {
    return true;
} else {
    return false;
}
}

$('#formidable input:radio[name="q11"]').change(updateFormEnabledOpt);
$('#formidable input:radio[name="q12"]').change(updateFormEnabledOpt);
$('#formidable input:radio[name="q13"]').change(updateFormEnabledOpt);​

所以:只要三个问题中的任何一个选中了单选按钮,#optmsg 就会被隐藏。 Jsfiddle(带有一些与脚本一起使用的 html):http://jsfiddle.net/rnPA6/

更新:感谢您的帮助!我可能会以惊人的速度添加!这是一个有效的小提琴:http://jsfiddle.net/rnPA6/14/

【问题讨论】:

  • 真是一团糟!!! 225 一行字符?!
  • 哈哈,是的,jsFiddle 的 TidyUp 删除了换行符(+ 他们让 jsLint 无论如何都会给出验证错误)。同意换行更漂亮

标签: javascript jquery forms validation


【解决方案1】:

val() 方法返回空字符串,如果输入元素中没有设置任何不等于undefined 的内容,因为 if 条件通过了。试试这个,如果值为空则不会通过。

if ($("#formidable input:radio[name='q11']:checked").val() 
     && $("#formidable input:radio[name='q12']:checked").val() 
     && $("#formidable input:radio[name='q13']:checked").val() ) {

}

当没有为输入单选按钮设置值时,当您在其上调用 val() 方法时,jQuery 返回 "on"。因此,如果未设置,您应该为每个单选按钮设置至少一个空值。

【讨论】:

  • 你为什么要把那可爱的一行“断”成三行? :)
  • 效果很好! (即使 jslint 报告了错误的换行符)
【解决方案2】:

您正在使用 and(&&) 进行比较。在this jsfiddle 中,我将您的代码修复为使用 or(||)。

【讨论】:

    【解决方案3】:

    您正在与包含文本 'undefined' 而不是值 undefined 的字符串进行比较。

    【讨论】:

      【解决方案4】:

      这样就可以了:

      function updateFormEnabledOpt() {
        $("#optmsg").show();
        if (($("#formidable input:radio[name='q11']:checked").val() !== undefined) && ($("#formidable input:radio[name='q12']:checked").val() !== undefined) && ($("#formidable input:radio[name='q13']:checked").val() !== undefined)) {
            $("#optmsg").hide();
        } 
      }
      
      $('#formidable input:radio[name="q11"]').change(updateFormEnabledOpt);
      $('#formidable input:radio[name="q12"]').change(updateFormEnabledOpt);
      $('#formidable input:radio[name="q13"]').change(updateFormEnabledOpt);
      

      查看实际操作:http://jsfiddle.net/BwUWp/

      【讨论】:

      • 这很完美!感谢您的帮助,已经实现了 ShankarSangoli 的解决方案,但这帮助我理解了为什么我的代码不起作用!
      猜你喜欢
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 2022-11-06
      • 2021-10-16
      相关资源
      最近更新 更多