我的情况如下:我有一个包含在页面中的脚本文件(somescript.js
)和同一页面中的另一段代码。在页面上我有两个按钮,第一个调用代码片段,它删除一个元素remove()
,另一个调用脚本文件中的函数,检查删除的相应元素是否仍然存在。问题是它仍然找到该元素。我该如何解决这个问题?
剪切的代码是:
<script language="javascript" type="text/javascript" src="jquery.js"></script>
<script language="javascript" type="text/javascript" src="somescript.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function() {
/* used by the second button to call the checking function */
$("#button2").live("click", function(e){ someFunction(); });
/* if the control is here, it works, but if it's called from the inserted file (somescript.js), it doesn't */
$("#button2").live("click", function(){
if ($("#somediv").length == 0) {
alert("Element missing");
}
});
/* used by the first button to remove the element */
$("#button1").live("click",function() {
$("#somediv").remove();
});
});
</script>
somescript.js
文件中的函数是:
function someFunction() {
if ($("#somediv").length > 0) {
alert("Alert message");
}
}
我收到了提醒信息。我做错了什么?
更新
我在页面内的代码片段中添加了相同的代码(请参阅上面的代码),这样就可以了。但是当它驻留在包含文件(somescript.js
)中时仍然不起作用。我错过了什么?????
答案 0 :(得分:1)
这是你想要做的。
if ($('#someDiv') === undefined || $('#someDiv').length == 0) {
alert('element does not exists');
}
你应该检查undefined而不是length的原因是因为在某些情况下如果元素不存在,.length
将如何存在?你会收到一个错误,说“长度”是未定义的无效函数。
编辑:
同时从脚本标记中删除language=javascript
。它应该是
<script type="text/javascript" src="somefile.js"></script>
此外,如果您仍然收到消息,您可能需要console.log($('#someDiv'));
查看正在发生的事情。它可能是你有2个具有相同id的元素,当一个元素被删除时,你的脚本会看到具有该ID的最后一个元素。因为在执行.remove()时ID应该是唯一的,所以只删除具有给定ID的第一个元素。
答案 1 :(得分:0)
在较新版本的jQuery中,live
函数为deprecated。尝试将其更改为on
,看看是否有帮助。
编辑:我明白了!好吧。
请将此jsfiddle视为“证明”您的代码本身没有错误。它与HTML标记有关。请分享,我们应该能够提供帮助。
答案 2 :(得分:0)
确保选择器正确无误。查看您的代码示例,我认为它们不正确。你正在删除一些元素并检查可能发生的事情。
您可以检查是否记录了此控制台消息吗?
$("#button1").live("click",function() {
$("#somediv").remove();
console.log('somediv removed');
});