Javascript 虽然只满足几个条件中的一个,但If语句返回true(jQuery)

Javascript 虽然只满足几个条件中的一个,但If语句返回true(jQuery),javascript,jquery,forms,validation,Javascript,Jquery,Forms,Validation,我想通知回答表单的用户,如果在提交之前没有回答任何可选单选按钮(以确保故意跳过它们)。 我的问题是,尽管我正在设置一个包含多个条件的if语句,但当满足其中任何一个条件时,if语句返回true,而不是当满足所有条件时返回true。我正在使用jquery1.7.1 Javascript: $("#optmsg").show(); function updateFormEnabledOpt() { if (verifyOpt()) { $("#optmsg").hide(); } else {

我想通知回答表单的用户,如果在提交之前没有回答任何可选单选按钮(以确保故意跳过它们)。 我的问题是,尽管我正在设置一个包含多个条件的if语句,但当满足其中任何一个条件时,if语句返回true,而不是当满足所有条件时返回true。我正在使用jquery1.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就会隐藏起来。 JSFIDLE(脚本附带一些html):

更新:谢谢你的帮助!我可能会以极快的速度加上!这里有一个有效的小提琴:

val()
方法返回空字符串,如果输入元素中未设置任何内容,则返回空字符串,该值不等于条件通过时所导致的
未定义的
。尝试此操作,如果值为空,则此操作将不会通过

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”
。因此,如果未设置,则应至少为每个单选按钮设置一个空值。

您正在使用and(&&)进行比较。在JSFIDLE中,我修复了要使用或(| |)的代码。

您正在与包含文本
'undefined'
而不是值
undefined

的字符串进行比较,这样做:

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

在行动中看到它:

真是一团糟!!!一行225个字符?!哈哈,是的,jsFiddle的TidyUp删除了换行符(+他们让jsLint给出了验证错误)。同意更漂亮的换行思考为什么你把那可爱的一行改成三行这真是太棒了!(尽管jslint报告了错误的换行符)这非常有效!感谢您的帮助,已经实现了ShankarSangoli的解决方案,但这帮助我理解了为什么我的代码不起作用!