0

我目前正在开发一个新网站,并且正在测试这些功能。我的所有代码都可以工作,但返回一个错误,我不明白也不知道如何解决。

<script type="text/javascript">
var eval = "Indtast CPR-nummeret, der skal valideres.";
$(document).ready(function () {
   $("#showads").html($("#ads").html());
});
function cprToBool(cpr){
    $.get('ajax.php',{ content: cpr }, function(data) {
        eval = data;
        $("#cprinput").val(eval);
        $("#cprinput").blur();
        });
             $("#showads").html($("#ads").html());   
}
function checkSubmit(e)
{
  if(e && e.keyCode == 13)
   {
    cprToBool($("#cprinput").val());
   }
}
</script>

调试后,我很确定它是

$("#showads").html($("#ads").html());

这导致了这些错误。它返回

Uncaught TypeError: Object Indtast CPR-nummeret, der skal valideres. has no method 'call' 

这是eval变量的名称。有人知道它为什么这样做吗?

PS。我已经正确地包含了 jQuery。

4

2 回答 2

1

将变量的名称从更改为eval其他名称……eval2就可以了。

jQuery 库中的某些内容正在尝试使用内置eval方法并且无法完成,因为您已经用字符串覆盖了它......这是不可调用的。

jQuery 多次使用此代码:

window[ "eval" ].call

并且由于您eval在全局范围内声明了变量,window[ "eval" ]因此被覆盖了。如果您在不同的范围内(以某种方式)声明它,它不会与 jQuery 代码冲突,但您将无法再在该范围内使用内置eval方法。

于 2012-12-18T17:41:49.390 回答
0

这里的答案/评论是正确的,您的覆盖eval导致其他代码段出错。您可以按照建议更改变量名称,尽管更好的建议 IMO 实际上是使用本地化变量;只要您不打算在自己的代码范围内使用,只要您的变量仅对您的代码可见eval,覆盖它就不是一个禁忌,而且根本不是问题。

于 2012-12-18T17:45:36.647 回答