Php Joomla 2.5模态弹出组件窗体
我正试图修改Joomla组件,以实现一些ajax功能,从而使我的网站用户能够更精简一些。我已经更改了下面的信息以保持项目的匿名性,因为我有妄想症:-) 我想实现的目标在我的脑海中很简单: ->用户登陆xyz组件中的“订单”页面 ->如果订单页面上没有此用户的配送地址,请提供一个链接以创建一个配送地址 ->当用户单击“添加地址”时,会出现一个模式窗口,并向“添加地址”页面发出ajax请求,该页面具有添加地址的表单 ->Modal不显示整个页面,而只显示表单和基本(必需)表单字段 ->用户输入地址信息并单击按钮提交表单 ->这些字段经过验证后发布 ->模式关闭 ->在原始“订单”页面上具有交货地址的字段将被刷新,现在包括新地址。这不应刷新整个页面,因为用户可能已将数据放入其他表单元素中。这很重要 好的,现在你知道我想要实现什么,让我向你介绍我目前拥有的 ->用户登陆xyz组件中的“订单”页面 ->如果订单页面上没有此用户的配送地址,请提供一个链接以创建一个配送地址 我已经编写了一个简单的php if语句,该语句创建了一个锚链接,其中包含文本“AddaAddress”和id“addNewAddress” ->当用户单击“添加地址”时,会出现一个模式窗口,并向“添加地址”页面发出ajax请求,该页面具有添加地址的表单 我正在使用一个名为Php Joomla 2.5模态弹出组件窗体,php,javascript,ajax,joomla,mootools,Php,Javascript,Ajax,Joomla,Mootools,我正试图修改Joomla组件,以实现一些ajax功能,从而使我的网站用户能够更精简一些。我已经更改了下面的信息以保持项目的匿名性,因为我有妄想症:-) 我想实现的目标在我的脑海中很简单: ->用户登陆xyz组件中的“订单”页面 ->如果订单页面上没有此用户的配送地址,请提供一个链接以创建一个配送地址 ->当用户单击“添加地址”时,会出现一个模式窗口,并向“添加地址”页面发出ajax请求,该页面具有添加地址的表单 ->Modal不显示整个页面,而只显示表单和基本(必需)表单字段 ->用户输入地址信
SimpleModal
from的mootols插件
->Modal不显示整个页面,而只显示表单和基本(必需)表单字段
我已经扩展了模式的功能,允许我插入一些mootools过滤,因为我只想显示表单,而不想显示其他内容。我已经添加了这个参数,作为一个名为getSomething
的新参数,如果需要,我可以注入它
//SIMPLEMODAL
$("addNewAddress").addEvent("click", function(){
var SM = new SimpleModal({"width":600});
SM.addButton("Action button", "btn primary", function(){
$('addressForm').submit();
this.hide();
});
SM.addButton("Cancel", "btn");
SM.show({
"model":"modal-ajax",
"title":"New address",
"param":{
"url":"index.php?option=com_address&modal=true",
"getSomething":"#addressForm",
"onRequestComplete": function(){}
}
});
});
这就是它调用的函数:
else if (param.getSomething.match(elid))
{
// Request HTML
this.request = new Request.HTML({
evalScripts:false,
url: param.url,
method: 'get',
onRequest: function(){},
onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
var f = responseElements.filter(param.getSomething);
$('simple-modal').removeClass("loading");
$('simple-modal').getElement(".contents").adopt(f);
param.onRequestComplete();
// Execute script page loaded
eval(responseJavaScript)
// Resize
this._display();
// Add Esc Behaviour
this._addEscBehaviour();
}.bind(this),
onFailure: function(){
$('simple-modal').removeClass("loading");
$('simple-modal').getElement(".contents").set("html", "loading failed")
}
}).send();
}
*现在,到目前为止,我已经成功地完成了所有工作,但我无法理解下一部分*强>
->用户输入地址信息并单击按钮提交表单
在ajax请求url的末尾,您可能会注意到我发送了modal=true请求,这样我就可以隐藏表单上不需要在模态窗口中显示的某些元素—当从模态窗口调用表单时,表单自己的提交按钮是隐藏的
->这些字段经过验证后发布
如果我调用没有模式的“addaddress”页面,那么表单有自己的验证。但是,使用模式,当我单击submit时,不会进行任何验证,并且添加地址时不会进行任何验证。我需要使用模式本身中的独立验证对字段进行一些验证
->模式关闭
目前,当表单发布时,我会被重定向到“viewaddresses
”页面,但我相信我可以自己解决这个问题。相反,我只想关闭模态
->在原始“订单”页面上具有交货地址的字段将被刷新,现在包括新地址。这不应刷新整个页面,因为用户可能已将数据放入其他表单元素中。这很重要
这是不言自明的,但我甚至不知道从哪里开始
我想我已经尽可能清楚了,但是如果你还需要什么,请告诉我
我非常感谢您提供的任何帮助。您可能缺少的是如何触发表单提交
- 您可以使用以下选项提交表单:
$('myForm')。fireEvent('submit')代码>
SM.addButton("Submit button", "btn primary", function () {
$('addressForm').fireEvent('submit');
});
在Mootools Form.Validator中,您可以捕获事件。说明:
formValidate-(函数)在表单验证完成时执行的回调;此函数传递三个参数:布尔值(如果表单通过验证,则为true);形式元素;和onsubmit事件对象(如果有)(否则,未定义传递)
我不确定当以编程方式启动submit时为什么不提交表单,但无论如何,您可以在此函数中添加一个新的.submit()
,用于检查验证器布尔结果
因此您可以这样做:
new Form.Validator.Inline(myForm, {
onFormValidate: function (bool, element) {
if (bool) {
element.submit();
}
}
演示一个链接或一把小提琴会更容易理解你的页面/行为。顺便问一下,您使用的表单验证是什么?mootools formcheck?也许它不适合您的用例,但是您不能从模式表单中分配主表单的字段,让主表单处理验证吗?Riccardo,我不确定这将如何实现。这对于用户来说非常重要,所以我不介意在后台做一些肮脏的工作。只是出于兴趣,有人知道我如何使用@Sergio在SimpleModel中验证表单吗组件正在使用mootools验证,但我不必坚持使用它。我目前正在查看formcheck,但我不知道如何使用它在模式窗口中验证表单。谢谢你的意见,Rich@Rich,对我来说有点不清楚你需要什么,你能说出这个例子中缺少什么吗:谢谢你再次为我看这个。代码按照我的意愿工作,但它阻塞了我的表单。如果我的表单使用fire事件方法,则会触发验证,但表单不会提交。如果我使用$('addressForm')。submit();表单已提交,但没有验证。这是在我的形式的头部-一切似乎都好吧@里奇,你有几张表格?在你的问题中,你指的是地址表,现在你指的是