我有一个表单,用户输入帐号,我需要检查输入的帐号是否是单击保存按钮时唯一的,但在表单提交前。这位于magento后端,并且ajax调用指向indexController中的函数acctnumAction()
。magento中的同步jquery ajax呼叫
账号的数量是动态的,可以有5个,但只有1个,所以我需要对物品进行每个循环。我给帐号字段自己的类,并循环。
这就是我得到的。
function acctCheck(){
jQ.each(jQ(".acctnum"), function(x, y){
var acct = jQ(this).val();
var field = this;
jQ.get("'.Mage::helper('core/url')->getHomeUrl().'dealerlocator/index/acctnum", {acctnum: acct}, function(data){
var items = JSON.parse(data);
if(items != ""){
$(field).addClass("validation-failed");
return false;
}
});
});
}
function saveAndContinueEdit(){
if(acctCheck() !== false){ editForm.submit(); }
}
保存按钮onclick命中saveAndContinueEdit()
并运行功能来检查帐户号码。
我知道这是行不通的,ajax会异步运行,并且在返回false之前不会返回任何内容,只要它不是false,它就会提交。但我已经试过包装在$。当Ajax调用无济于事,我裹在$。当如果saveAndContinueEdit()
,像这样
function saveAndContinueEdit(){
jQ("#continueEdit").val("1");
jQ.when(acctCheck()).done(function(valid){
if(valid !== false){
editForm.submit();
}
});
}
但没有做的伎俩要么,而且可能连它应该如何工作,我只是想尽一切办法。
让它在每一个中的这一点是,我可以设置一个变量为false,如果一个帐号无效,但仍然通过其余的迭代,以便该类仍然会被添加到字段,如果他们是无效的,所以用户会知道,而不是修复一个,然后弹出一个无效,即使我的例子不是这样编码的。我知道get返回的数据是有效的,它不会同步运行。
任何人有任何想法?
我没有时间完全回答,但考虑使用像[Frame.js](https://github.com/bishopZ/Frame.js)这样的流控制库。它具有清理问题的能力;它有点像你想要什么时候做的事情。呃,也许我们应该将Frame重命名为$ .when。这是一个更好的名字。 – BishopZ