Javascript错误停止$ document.ready()

时间:2013-11-19 18:41:07

标签: javascript jquery typeerror

我正在更新在Expression Engine上运行的现有网站。到目前为止,我已经远离了任何我没写过或无法理解的代码。我最近必须在某处修改了一些代码(很有帮助,我知道),现在我写的一个JS块没有写出一个似乎绕过document.ready()事件的错误。然而,window.load()事件仍在发生。

在Chrome DevTools控制台中,错误“Uncought TypeError:无法调用方法'替换'UNDEFINED”指向下面粘贴的函数“fixedEncodeURIComponent”的定义。

$("#MessageContainer.Counted").counter({
type: 'char',
goal: 250,
count: 'down' 
}).change(function(){
var TEMP = fixedEncodeURIComponent($(this).val());
$("#Message").val(TEMP);
});

var TEMP = fixedEncodeURIComponent($("#MessageContainer.Test").val());
$("#Message").val(TEMP);

function fixedEncodeURIComponent (str) {
str=str.replace(/"/g, '');
  return encodeURIComponent(str).replace(/[!'()*]/g, escape);
}

当我解释错误时,这个函数被传递一个不是字符串的变量。我在函数定义中添加了一个警告(str),结果按照我的预期进行了UNDEFINED。对我来说,几个未知数中的第一个是对函数'fixedEncodeURIComponent'的调用传递了一个坏变量。我认为这是第一次打电话,但这只是猜测。碰巧这第一个调用包含了我以前从未遇到过的语法。我不知道如何解释当$(this)作为函数参数传递时会发生什么。

任何见解都将不胜感激。另外,如果您需要更多信息,请告诉我们。客户端的站点受密码保护,但我可以包含您请求的任何代码。

谢谢。

2 个答案:

答案 0 :(得分:1)

我猜测第3行的});正在退出document.ready上下文。如果是这种情况,则可能在DOM加载之前调用fixedEncodeURIComponent第二次调用。

首先包装

var TEMP = fixedEncodeURIComponent($("#MessageContainer.Test").val()); $("#Message").val(TEMP);

中的

$(function() {
// code
});

块。如果这不起作用,请检查#MessageContainer.Test是否与元素匹配。由于这是您继承的代码,因此类名“Test”会让我觉得有问题的块可能是某个试图调试问题的人的遗留物,也许它应该被移除。

答案 1 :(得分:1)

我怀疑$("#MessageContainer.Test")因为看起来它应该是一个ID选择器,而不是当jQUery解析它时它实际上是它(它是一个与类选择器结合的ID选择器)。 $("MessageContainer\\.Test")允许您选择ID为MessageContainer.Test

的元素