如何等待一个函数完成并循环

时间:2014-07-24 09:01:44

标签: javascript forms prompt alertify

这是我的代码的一部分:

document.querySelector("#edit_<?= $row["item_id"]; ?>").addEventListener("submit", function(a){
    if(!completed){
        a.preventDefault();
    }else{
        return true;
    }

    if((function(){
        alertify.prompt("New Amount of Item : ", function(e, str){
            if(e){
                document.querySelector("#edit_<?= $row["item_id"]; ?> input[name=\"item_amount\"]").value = str;
                var completed = true;
                return true;
            }else{
                return false;
            }
        })
    )() == true){
        document.querySelector("#edit_<?= $row["item_id"]; ?>").submit();
    }
});

<? $row["item_id"]; ?>将返回某些内容(忽略它,这不是真正的问题)

但问题是我需要等到alertify.prompt()获得str然后将其放到

document.querySelector("#edit_<?= $row["item_id"]; ?> input[name=\"item_amount\"")

(抱歉这个杂乱的代码)

我该怎么做才能解决这个问题?

P.S。如果可能的话,最好不要使用jQuery解决方案,因为它已经给出了。请使用仅限Javascript的解决方案。

4 个答案:

答案 0 :(得分:0)

提示函数接收一个回调函数,该函数将在文本之后执行  接收。你可以在那里继续你的逻辑

alertify.prompt("Message", function (e, str) { // str is the input text if (e) { // user clicked "ok" } else { // user clicked "cancel" } }, "Default Value");

注意:取自Alertify examples

答案 1 :(得分:0)

不要直接混用javascript(客户端)和php(服务器),  要将数据从客户端传递到服务器或服务器到客户端,您可以使用ajax

答案 2 :(得分:0)

删除第二个if条件,然后使用alertify回调函数:

// define the completed variable outside the callbacks
var completed = false;
document.querySelector("#edit_<?= $row["item_id"]; ?>").addEventListener("submit", function(a){
    if(!completed){
        a.preventDefault();
    }else{
        return true;
    }
    alertify.prompt("New Amount of Item : ", function(e, str){
        if(e){
            document.querySelector("#edit_<?= $row["item_id"]; ?> input[name=\"item_amount\"]").value = str;
            //no var before completed, because then it would be local to this callback function
            completed = true;
            // here instead returning "true" do what you wanted to do if true
            document.querySelector("#edit_<?= $row["item_id"]; ?>").submit();
        }
    });
});

答案 3 :(得分:0)

prompt方法是异步的,因此在退出外部函数后将调用回调。从回调中提交表单:

alertify.prompt("New Amount of Item : ", function(e, str){
  if(e){
    completed = true; // note: no "var"
    var f = document.querySelector("#edit_<?= $row["item_id"]; ?>");
    document.querySelector("input[name=\"item_amount\"]", f).value = str;
    f.submit();
  }
})