我遇到jQuery Impromptu的问题,特别是带有内联表单回调函数的$ .prompt。
现在,实际的具体问题如下。如果提交时email_address
字段为空,则无法让$.prompt('Please supply an email address for the customer')
生效,但是如果我将其更改为alert('Please supply an email address for the customer')
则会有效。
我猜这是一个范围问题,因为其他$.prompt
调用按预期工作,我认为这是因为它们位于$.post
回调函数中。
我一直在努力寻找大量的回调表单功能文档,虽然我觉得我理解e
,v
和f
变量,{{1} (消息)不是我以前用过的东西。当我将m
记录到控制台日志时,它看起来像jQuery Impromptu对象,但是我不确定如何访问它的属性。我尝试了m
和m.prompt()
,但这些只是猜测我将如何访问$.m.prompt()
函数。
Javascript
prompt
var txt = '<input type="text" name="email_address" value="" />';
function mycallbackform(e,v,m,f)
{
if(v != undefined)
{
if (v == true)
{
console.log(f);
if (f.email_address.length == 0)
{
console.log(m);
$.prompt('Please supply an email address for the customer');
}
else
{
$.post('". $this->view->url(array(), 'admin-create-user-from-checkout') ."', f, function(data) {
if(data.status)
{
$.prompt('Customer Record Created Successfully');
}
else
{
$.prompt('Customer Record could not be created');
$('#email_address').val($('#old_email_address').val());
}
}, 'json');
}
}
else
{
$('#email_address').val($('#old_email_address').val());
}
}
$.prompt(txt,{callback: mycallbackform, buttons: { Ok: true, Cancel: false }});
的控制台日志
m
答案 0 :(得分:1)
解决了问题!
@link: https://github.com/trentrichardson/jQuery-Impromptu/issues/6
引用
使用新的事件系统,回调绑定到提示符。因此必须在销毁提示之前调用回调。即兴不一次用于多个提示。
如果你想解决这个问题,一个简单的解决方案就是setTimeout(10,function(){$ .prompt(...);});回调内部。这将为之前提示关闭提供机会。
修正了Javascript
var txt = '<input type="text" name="email_address" value="" />';
function mycallbackform(e,v,m,f)
{
if(v != undefined)
{
if (v == true)
{
if (f.email_address.length == 0)
{
setTimeout(function(){ $.prompt('Please supply an email address for the customer'); }, 10);
}
else
{
$.post('". $this->view->url(array(), 'admin-create-user-from-checkout') ."', f, function(data) {
if(data.status)
{
$.prompt('Customer Record Created Successfully');
}
else
{
$.prompt('Customer Record could not be created');
$('#email_address').val($('#old_email_address').val());
}
}, 'json');
}
}
else
{
$('#email_address').val($('#old_email_address').val());
}
}
$.prompt(txt,{callback: mycallbackform, buttons: { Ok: true, Cancel: false }});