Javascript Jquery字符串和逻辑OR

Javascript Jquery字符串和逻辑OR,javascript,jquery,Javascript,Jquery,下面的代码行有什么问题 它一直在抱怨systax错误..等等 if( (radioval === "undefined") || (radioval === null) || (radioval === "null") ) { 运行中的完整状态 if($('#digitallogin').is(":checked")){ var radioval = $("input[name=certificateradio]:checked").val();//its gi

下面的代码行有什么问题

它一直在抱怨systax错误..等等

if( (radioval === "undefined")  || (radioval === null) || (radioval === "null") ) { 
运行中的完整状态

if($('#digitallogin').is(":checked")){
              var radioval = $("input[name=certificateradio]:checked").val();//its giving the string "user" 
                if( (radioval === "undefined")  || (radioval === null) || (radioval === "null") ) {   //this line 
                    $("#login_error").text("please select the signin certificate");
                        return false;
                 }

          } 

感谢您的帮助。

.val()
在多选值的情况下返回字符串值、
null
数组,因此您可以尝试:

if (/null|undefined/i.test(radioval) || !radioval.length){ /*...*/ }
由于您似乎要检查正在检查的[其中一个]
$(“input[name=certificateradio]”
,因此这也足够了

if( ( !$("input[name=certificateradio]:checked").length ) {
  $("#login_error").text("please select the signin certificate");
   return false;
}
甚至更短

if( $('#digitallogin').is(":checked") && 
    !$("input[name=certificateradio]:checked").length ) {
  $("#login_error").text("please select the signin certificate");
  return false;
}
试一试


在radioval的第三次比较中 radioval==“null”和not==null

$(“输入[name=certificateradio]:选中”).val();如果未选中,则返回未定义(typeof undefined==未定义),如果选中,则返回“on”(typeof“on”==字符串)

一个小例子:

<input name="certificateradio" type="checkbox" /> 
<button>run</button>

$("button").click(function(){
    console.log($("input[name=certificateradio]:checked").val());
    console.log(typeof $("input[name=certificateradio]:checked").val());
});

代码中没有语法错误。如果代码有语法错误,Firebug控制台(而不是监视面板)中会出现错误消息,并且代码根本不会运行。你永远不会到达断点

屏幕截图中的语法错误出现在手表表达式中。删除watch表达式,这些错误消息就会消失

在您更新的屏幕截图中,我可以看到语法错误是什么。仔细查看您的手表表达式(此处重新格式化以避免滚动):

这不是一个表达式,而是一个
if
语句。如果要将其用作watch表达式,则只需要
If
语句中的表达式。也就是说,删除
if(
和最后的

关于您正在进行的特定测试,如果没有选择任何元素,jQuery的
.val()
方法将返回
undefined
。请注意,jQuery文档中有一个错误:当没有匹配的元素时,
.val()
返回
null
。这是错误的;在这种情况下,它返回未定义的
。这里是返回未定义的
(因为它是一个简单的
返回;
没有值)


但这是
未定义的值,而不是字符串
“未定义的”
。您可以使用
radioval===undefined
对此进行测试。或者您可以使用
radioval==null
。注意
=
而不是
==
;此测试同时匹配
null
未定义的值。如果jQuery团队决定更改代码以匹配文档,并开始返回
null
而不是
undefined
,那么这可能是最安全的选择。(不太可能,但你永远不知道。)通过测试
radioval==null
它将针对任何一个值进行测试。

@AlexFilipovici为什么会这样?@AlexFilipovici我将===用于严格的比较。虽然我也使用==进行了测试。没有什么错误。@gdoron如果这是真的,我会很高兴,但是firebug告诉我它的语法是:你能用小提琴重现这个问题吗?或者给我们看更多的代码?这会做一些不同的事情,它应该如何解决语法错误?@commit-typeof只用于在运行时打开与任何特定时间关联的任何关闭的泛型类型。@dystroy-typeof只用于在运行时打开与任何特定时间关联的任何关闭的泛型类型。@dystroy似乎没有代码中出现语法错误,但这是检查“未定义”的完美方法,因为无论变量是否存在,typeof都将返回字符串,它不会引发异常。您是对的。如果是multiselect,它还可以返回数组。回答:为什么?你能解释一下吗?==是与数据类型关联的值的严格比较。当我没有选择任何单选按钮时,val返回我undefined@Baadshah
“未定义的”
未定义的
非常不同。当你删除断点时,你能确认问题消失了吗?@dystroy谢谢你让我意识到。我怎么能检查未定义的?删除引号。。。或者干脆
如果(!radioval){
@dystroy谢谢。让我试试
<input name="certificateradio" type="checkbox" /> 
<button>run</button>

$("button").click(function(){
    console.log($("input[name=certificateradio]:checked").val());
    console.log(typeof $("input[name=certificateradio]:checked").val());
});
if($("input[name=certificateradio]:checked").val() ==="on"){
   ...
}
if(
    (radioval === "undefined")  ||
    (radioval === null) ||
    (radioval === "null")
)