我有以下javascript,它会在屏幕上弹出一条消息,但是如果尚未将其删除,它总是位于上一个messageDiv的顶部。

我试图弄清楚如何使messageDiv向下推上一个div直到消失,然后取代上一个MessageDiv的位置,或者显示在页面上当前页面的正下方,向下移动到新页面的正下方。出现。

function pushDev(){
    $.post( "#cgi.SCRIPT_NAME#", {fileId: "#fileIdIn#", action: "migrateFileDev"}, function(data){
        $("body").prepend("<div class='pageMessage' id='messageDiv'>" + data + "</div>");
        setTimeout(function(){$('#messageDiv').remove()}, 6000);
    });
}

function savePage(){
    var code = editor.getValue();
    $.post( "#cgi.SCRIPT_NAME#", {fileIdIn: "#fileIdIn#", filePath: "#path#", action: "savePage", editText: code }, function(data){
        $("body").prepend("<div class='pageMessage' id='messageDiv'>Saved</div>");
        setTimeout(function(){$('#messageDiv').remove()}, 6000);
    });
}


.pageMessage{
    /*position:fixed;*/
    /*top: 15%;*/
    /*right: 8%;*/
    background-color: #f5f5f5;
    opacity: 0.9;
    color: #FFF;
    font-size: 18px;
    text-align:center;
    padding: 8px;
    width: auto;
    height:auto;
    border:solid;
    border-color: #00A3DD;
    border-width: 3px;
    z-index: 1000;
    border-radius: 8px;
}

最佳答案

我认为您遇到了问题,因为您有多个具有相同ID的元素,并且在执行setTimeout回调时,它将删除最新消息,而不是最旧消息。 HTML中仅允许使用具有给定ID的一个元素。您需要找出另一种方法来查找应该为特定超时而删除的div,例如(我摆脱了无关的AJAX代码):

function pushDev(){
    var messageDiv = $("<div class='pageMessage'>Data</div>")
    $("body").prepend(messageDiv);
    setTimeout(function(){messageDiv.remove()}, 6000);
}

function savePage(){
    var messageDiv = $("<div class='pageMessage'>Saved</div>")
    $("body").prepend(messageDiv);
    setTimeout(function(){messageDiv.remove()}, 6000);
}


JSFiddle here

08-19 01:14