javascript 名称以 $ 开头的变量有时会产生错误
javascript variables with names starting with a $ are sometimes producing errors
直到最近,我一直使用以 $ 开头的 javascript 变量名称来表示变量包含 jQuery 值,即:$buttons = $( 'button' );
但是,两天前,当我将页面加载到最新版本的 Chrome:
时尝试此操作时,我开始出现此错误
Notice: Undefined variable: buttons
500 Internal Server Error - ContextErrorException
Stack Trace
in src/AppBundle/Controller/pages/myVideos.php at line 6086 -
6086. function button_Click( This ) {
6087. var $buttons = $( 'button' );
6088. } // End of button_Click( This ) function.
但是,如果我从按钮变量 declaration/assignment 中删除 $,则不会发生此错误。
这对我来说似乎很奇怪,无论我是否在按钮之前有 $,在同一页面中,我在其他函数中有很多其他变量声明使用前导 $,但它们不会产生这些错误,这是一个示例:
function ytPictureSelect_Click() {
const ELEMENT_PATH_URI = 'tr:first>td.webvideourlURI>span';
const ELEMENT_PATH_PICTURE = 'tr:eq(1)>td.webvideourlPicture';
var This = ( ( this.tagName === 'TD' )
? this
: event.target );
var $This = $( This );
var $element = $This.closest( 'table' );
var $table = $element.parent().closest( 'table' );
var $webvideourlURI = $table.find( ELEMENT_PATH_URI );
var youTube = ( $webvideourlURI.attr( 'youTube' ) === 'true' );
var embedded = ( $webvideourlURI.attr( 'embed' ) === 'true' );
var ytId = $webvideourlURI.attr( 'ytId' );
var $webvideourlPictures = $table.find( ELEMENT_PATH_PICTURE )
.children( 'textarea, span' );
:
} // End of ytPictureSelect_Click() function.
任何人都知道为什么 buttonClick 函数不 喜欢 领先的 $,但使用此命名约定的所有其他函数,好吗?
更新:
我正在使用 Symfony ver 2.8 和 PHP 创建我的页面,页面被放入一个数组,然后数组的内容被发送到浏览器如下,减去实际发送的代码页面:
$strMAINs[] = <<<"MAIN"
<script>
function button_Click( This ) {
var $buttons = $( 'button' );
} // End of button_Click( This )
</script>
MAIN;
上面的代码是我所说的错误的来源,还有另一个类似的语句创建了另一个有效的函数,即使它有 $ 前缀变量。
谢谢
charlietfl,关于这是一个 PHP 错误是正确的。我的第二个回复详细说明了发生的事情。
为了使这些类型的替换更清晰,我使用 ${php-variable-name},但这只是一种约定,据我所知,没有办法强制使用 $ {...} 与简单的 $.太糟糕了,因为当我忘记从双引号切换到单引号时,它会对我的 jQuery 语句造成严重破坏。
直到最近,我一直使用以 $ 开头的 javascript 变量名称来表示变量包含 jQuery 值,即:$buttons = $( 'button' );
但是,两天前,当我将页面加载到最新版本的 Chrome:
Notice: Undefined variable: buttons
500 Internal Server Error - ContextErrorException
Stack Trace
in src/AppBundle/Controller/pages/myVideos.php at line 6086 -
6086. function button_Click( This ) {
6087. var $buttons = $( 'button' );
6088. } // End of button_Click( This ) function.
但是,如果我从按钮变量 declaration/assignment 中删除 $,则不会发生此错误。
这对我来说似乎很奇怪,无论我是否在按钮之前有 $,在同一页面中,我在其他函数中有很多其他变量声明使用前导 $,但它们不会产生这些错误,这是一个示例:
function ytPictureSelect_Click() {
const ELEMENT_PATH_URI = 'tr:first>td.webvideourlURI>span';
const ELEMENT_PATH_PICTURE = 'tr:eq(1)>td.webvideourlPicture';
var This = ( ( this.tagName === 'TD' )
? this
: event.target );
var $This = $( This );
var $element = $This.closest( 'table' );
var $table = $element.parent().closest( 'table' );
var $webvideourlURI = $table.find( ELEMENT_PATH_URI );
var youTube = ( $webvideourlURI.attr( 'youTube' ) === 'true' );
var embedded = ( $webvideourlURI.attr( 'embed' ) === 'true' );
var ytId = $webvideourlURI.attr( 'ytId' );
var $webvideourlPictures = $table.find( ELEMENT_PATH_PICTURE )
.children( 'textarea, span' );
:
} // End of ytPictureSelect_Click() function.
任何人都知道为什么 buttonClick 函数不 喜欢 领先的 $,但使用此命名约定的所有其他函数,好吗?
更新:
我正在使用 Symfony ver 2.8 和 PHP 创建我的页面,页面被放入一个数组,然后数组的内容被发送到浏览器如下,减去实际发送的代码页面:
$strMAINs[] = <<<"MAIN"
<script>
function button_Click( This ) {
var $buttons = $( 'button' );
} // End of button_Click( This )
</script>
MAIN;
上面的代码是我所说的错误的来源,还有另一个类似的语句创建了另一个有效的函数,即使它有 $ 前缀变量。
谢谢
charlietfl,关于这是一个 PHP 错误是正确的。我的第二个回复详细说明了发生的事情。
为了使这些类型的替换更清晰,我使用 ${php-variable-name},但这只是一种约定,据我所知,没有办法强制使用 $ {...} 与简单的 $.太糟糕了,因为当我忘记从双引号切换到单引号时,它会对我的 jQuery 语句造成严重破坏。