在动态更改数据后检查函数是否存在(在 ajax 调用之后)
check if a function exist after dynamically changing data (after an ajax call)
我有一个函数在 window 加载时执行
<div id="removeItOnAjaxCall">
<script>
foo = function() {
// some stuff
}
</script>
</div>
还有一个 ajax 调用可以从 DOM 等中删除此函数。
new Ajax.Updater('chkboxpos, 'myscript.php', {
onSuccess: function(response) {
$('removeItOnAjaxCall').remove(); //now I don't have foo function in my DOM. but DOM think it is
}
});
现在如果我调用这个函数我会得到一个错误
element is null
var method = element.tagName.toLowerCase();
因为 DOM 认为它定义了该函数,但实际上它没有。我希望我现在说得更清楚了。
foo = function() {
// some stuff
}
if(typeof foo == "function")){
console.log("function exist");
}
您对 <script>
标签的工作方式感到困惑。一旦遇到并解析了脚本,其中的任何定义都不会被删除,即使 script
标记或其封闭元素被删除也是如此。函数未定义的唯一方法是明确地这样做,例如 delete window.fun;
或 fun = null
.
因此,您的担心是错误的。无需检查该函数是否仍然存在——它确实存在,无论您在 ajax 处理程序中操作了什么元素。为什么您认为函数会变成未定义的?
DOM 从根本上与 JS 命名空间分开。 DOM 中不包含函数;它们包含在 JS 命名空间中。 DOM 不知道什么功能可能存在或不存在。您对 DOM 所做的任何事情都不会影响 JS 逻辑或数据。由于 DOM 中不存在函数,因此无法从 DOM 中删除它们。你说
Now if I make a call to this function I got an error because the DOM thinks it has that function defined but actually it doesn't have one.
关于您的错误:
element is null
var method = element.tagName.toLowerCase();
这与功能无关foo
。由于该元素已被删除,因此它为空。您无法获取不存在的元素的 tagName
。你说你是 "making a call to this function",但你并没有调用那个函数。您正在尝试获取元素的 tagName
,这是完全不同的事情。
话虽如此,将脚本标签放置在可能会被删除的元素中似乎有点奇怪——你为什么要这样做?
我有一个函数在 window 加载时执行
<div id="removeItOnAjaxCall">
<script>
foo = function() {
// some stuff
}
</script>
</div>
还有一个 ajax 调用可以从 DOM 等中删除此函数。
new Ajax.Updater('chkboxpos, 'myscript.php', {
onSuccess: function(response) {
$('removeItOnAjaxCall').remove(); //now I don't have foo function in my DOM. but DOM think it is
}
});
现在如果我调用这个函数我会得到一个错误
element is null
var method = element.tagName.toLowerCase();
因为 DOM 认为它定义了该函数,但实际上它没有。我希望我现在说得更清楚了。
foo = function() {
// some stuff
}
if(typeof foo == "function")){
console.log("function exist");
}
您对 <script>
标签的工作方式感到困惑。一旦遇到并解析了脚本,其中的任何定义都不会被删除,即使 script
标记或其封闭元素被删除也是如此。函数未定义的唯一方法是明确地这样做,例如 delete window.fun;
或 fun = null
.
因此,您的担心是错误的。无需检查该函数是否仍然存在——它确实存在,无论您在 ajax 处理程序中操作了什么元素。为什么您认为函数会变成未定义的?
DOM 从根本上与 JS 命名空间分开。 DOM 中不包含函数;它们包含在 JS 命名空间中。 DOM 不知道什么功能可能存在或不存在。您对 DOM 所做的任何事情都不会影响 JS 逻辑或数据。由于 DOM 中不存在函数,因此无法从 DOM 中删除它们。你说
Now if I make a call to this function I got an error because the DOM thinks it has that function defined but actually it doesn't have one.
关于您的错误:
element is null
var method = element.tagName.toLowerCase();
这与功能无关foo
。由于该元素已被删除,因此它为空。您无法获取不存在的元素的 tagName
。你说你是 "making a call to this function",但你并没有调用那个函数。您正在尝试获取元素的 tagName
,这是完全不同的事情。
话虽如此,将脚本标签放置在可能会被删除的元素中似乎有点奇怪——你为什么要这样做?