我正在更新在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)作为函数参数传递时会发生什么。
任何见解都将不胜感激。另外,如果您需要更多信息,请告诉我们。客户端的站点受密码保护,但我可以包含您请求的任何代码。
谢谢。
答案 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