检查使用AJAX删除的元素是否仍然存在

时间:2012-01-23 15:16:49

标签: ajax jquery

我的情况如下:我有一个包含在页面中的脚本文件(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)中时仍然不起作用。我错过了什么?????

3 个答案:

答案 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');
});