这是我的代码的一部分:
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的解决方案。
答案 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();
}
})