JavaScript / jQuery代码:
( $( 'carriercode' ) && $( 'carriercode' ).value == '' )
{
alert( 'Please select Shipping Carrier Code' );
return false;
}
这并不是好奇,而是一个问题。
问题1:我以前从未见过这种结构。它似乎完全像if()
语句一样工作,但是没有if
关键字。是否有效/标准/可靠?
问题2:jQuery选择器正在寻找carriercode
标签,该标签显然不是标准HTML的一部分。这是Smarty的功能,还是只是懒惰的开发人员在制作新标签?同样,它是否有效(在Smarty中),标准惯例,并且可以可靠地工作吗?
相关:我在一个简单的HTML页面(如下)中做了一个最小的测试,该页面可以工作,但不是有效的标记。我很好奇它是否可以在不同的环境中可靠地工作。在编写自己的代码时,我总是遵循标准,但是有时在加入现有项目时进入并修复所有代码是不切实际的。
<!doctype html>
<html lang='en-gb'>
<head>
<meta charset='utf-8' />
<title>Test</title>
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script>
//<![CDATA[
( $( 'test' ) && $( 'test' ).value === 'test' )
{
alert( 'test!' );
}
//]]>
</script>
</head>
<body>
<h1>Test</h1>
<p>Test</p>
<test value='test'></test>
</body>
</html>
我一直无法通过搜索互联网找到关于这两个问题的更多信息,搜索if
往往会为初学者返回许多有关JavaScript的结果,这可能淹没了诸如此类更深奥的案例的答案这个。预先感谢您的任何见解!
答案 0 :(得分:0)
总结评论中提供的有用答案,以及更多信息:
在条件语句上省略if
只是意味着结果在求值后将被丢弃。换句话说,这是一个错误。
令人困惑的是,我发现此代码的代码库同时使用jQuery和Prototype.js,这两个代码默认都使用$()
构造。 $( 'test' ) && $( 'test' ).value === 'test'
是有效的Prototype.js,它正在寻找id
为#test
的元素。这与jQuery相反,在jQuery中要寻找id
,它必须在选择器中以#
为前缀。实际上,此代码库使用jQuery的noConflict()
来避免使用$()
,因为它会干扰Prototype.js。
jQuery选择器可用于任何元素名称,而不仅仅是在HTML中有效的元素。
在提出问题之前,我应该做更多测试。再次感谢评论者的帮助和耐心!