在动态更改数据之后(在ajax调用之后)检查函数是否存在
check if a function exist after dynamically changing data (after an ajax call)
我有一个在窗口加载时执行的函数
<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认为它定义了那个函数,但实际上它没有。我希望我现在能说得更清楚。
您对<script>
标记的工作方式感到困惑。一旦遇到并解析了脚本,就永远不会删除脚本中的任何定义,即使script
标记或其封闭元素已被删除。函数未定义的唯一方法是显式定义,例如delete window.fun;
或fun = null
。
因此,你的担心是错误的。不需要检查函数是否仍然存在——不管您在ajax处理程序中操作了什么元素,它都存在。为什么你认为这个函数会变得未定义?
DOM从根本上与JS命名空间是分离的。函数不包含在DOM中;它们包含在JS命名空间中。DOM根本不知道哪些函数可能存在或不存在。您可能对DOM做的任何事情都不会影响JS逻辑或数据。由于函数不存在于DOM中,因此无法从DOM中删除它们。你说
现在,如果我调用这个函数,我会得到一个错误,因为DOM认为它定义了那个函数,但实际上它没有。
关于您的错误:
element is null
var method = element.tagName.toLowerCase();
这与函数CCD_ 5无关。由于该元素已被删除,因此它为null。无法获取不存在元素的tagName
。你说你在"调用这个函数",但你没有调用那个函数。您正在尝试获取一个元素的tagName
,这是一个完全不同的东西。
话虽如此,在可能要删除的元素中放置脚本标记似乎有点奇怪——你为什么这么做?
foo = function() {
// some stuff
}
if(typeof foo == "function")){
console.log("function exist");
}
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 在动态更改数据之后(在ajax调用之后)检查函数是否存在
- 使用 javascript / jquery 检查 URL 在第二个“/”之后是否有任何内容
- Javascript - 如何在字符串中找到子字符串并检查它之前/之后是否有空格
- Rails检查部分在ajax调用之后被完全加载
- 检查regex是在字符串的开头还是在特定字符之后开始
- 在600长度之后检查最接近的点(“.”),然后删除该点之后的所有文本
- 检查html日期输入是否在给定日期之后
- Html,js文件在mac上显示为文本,甚至在检查扩展名和文本类型之后
- 可靠的方式来检查互联网连接或AJAX请求之后
- 如何在纯JavaScript中检查元素的颜色是否与其背景颜色相等(在渲染之后)
- Angular js会在每次onkeyup动作之后检查输入框,看它是否满足一个条件
- 如何检查一个元素在id的哈希符号之后是否有一个字符串?
- 如何使用PrototypeJS检查一个元素是否在另一个元素之后
- 在页面加载时未勾选输入复选框;但是在使用"alert()"之后被检查
- 如何检查onKeyPress在onKeyDown之后是否未启动
- 如何使用jQuery检查当前元素之后是否存在元素
- 在表完全加载jQuery之后,检查数据表是否为空
- 在onChange事件之后检查变量的多个输入