0

知道为什么这在 IE 7/8 中不起作用吗?(在 IE 9 和 10、FF 和 Chrome 中运行良好)

当我单击“发送”按钮时,控制台显示:

SCRIPT438: Object doesn't support this property or method 
script.1383689376.js, line 94 character 3
(Line 94) : token = $("#token").val();

HTML:

<div class="comment_heading">Leave a Comment</div>
<div class="post_comment">
<textarea name="txtpostcomment" id="txtpostcomment-'.$postid.'" class="txtpostcomment"></textarea>
<button class="btnpostcomment" id="btnpostcomment-'.$postid.'" onclick="comment('.$postid.');" type="button">Send</button>
<input type="hidden" name="token" id="token" value="'.$_SESSION['token'].'">
<script>document.getElementById("txtpostcomment-'.$postid.'").focus();</script>
</div>

脚本:

comment = function(postid1)
{
    txt =  $('#txtpostcomment-'+postid1);
    btn =  $('#btnpostcomment-'+postid1);

    comment1 = $(txt).val();
    token = $("#token").val();

    $(btn).css('background-image', 'url(/comments/submit-busy.gif)');
    $(btn).attr('disabled', true);
    $(btn).attr('disabled', true);
    ....
    ....
}
4

1 回答 1

4

这行 HTML:

<input type="hidden" name="token" id="token" value="'.$_SESSION['token'].'">

创建一个名为“token”的全局对象的属性,它是对输入元素的引用。

在这一行:

  token = $("#token").val();

你有一个未声明的标识符。执行此行时,IE 尝试创建一个全局变量令牌(因为未声明的变量),但因为已经有一个(前面提到的 DOM 元素),IE 会抛出错误。

为什么 IE 不简单地分配新值是一个已经被问了十多年的问题,你不会得到一个明智的答案。

简单的解决方法是声明所有变量

使用函数表达式分配给未声明的变量特别糟糕。与函数声明相比,它的好处为零,并且有一些严重的缺点(您刚刚发现了一个)。因此,请始终在适当的范围内声明变量并始终使用函数声明,除非您有充分的理由使用函数表达式。

于 2013-11-05T22:49:41.883 回答