【发布时间】:2014-05-15 14:31:43
【问题描述】:
我使用 Yii 作为我网站的 PHP 框架。此外,我的网站使用了一些 js/jquery,例如 jQuery UI 对话框小部件(除了那些对话框,其余代码都是纯普通的 html 表单组件和用于事件处理程序的 jQuery 代码)。
在 Yii 方面,我使用CForms to build my forms from specifications file。
当我测试表单是否提交时,我必须对某个按钮进行测试。这不仅是强迫的,而且我也利用它。
if ($myCFormInstance->submitted('approve')) {
//process approval code
} else if ($myCFormInstance->submitted('reject')) {
//process rejection code
}
我遇到的实际问题有点概念性,因为 - 幸运的是 - 我知道我的代码发生了什么 - 再次幸运的是 - 知道问题的根源:
在我的代码中,我截获了提交按钮的点击事件:
$(function(){
$(".critical-action").click(function(e){
var form = $(this).closest("form");
e.preventDefault();
e.stopImmediatePropagation();
confirmDialog("¿Continuar?", "#critical-action-dialog", function(){
form.submit();
});
});
});
假设 .critical-action 分类元素始终是表单中的提交按钮。
代码的意图:取消表单提交,只有当用户在对话框中单击“是,继续”(即确认操作)按钮时才执行。
此代码按预期工作,并且在 javascript 级别没有问题但是 - 这是我的问题 - 在执行 form.submit() 时,按钮不会作为表单的一部分发送 .这很明显:我发送表单时没有指定任何按钮。在 Approve 和 Reject 有两个按钮的情况下,这个例子解释了自己:如果form.submit() 调用可以发送他们的按钮¿他们应该发送哪个?
问题:所以,由于form.submit() 不发送任何按钮,但我实际上需要按钮¿我如何发送“带有相应按钮”的表单-IE。我选择指定的按钮,它应该对应于点击处理函数上下文中的this - 自动通过javascript? Yii 需要识别按钮需要以处理表单(特别是在批准和拒绝情况下)。
【问题讨论】:
-
也许您可以使用隐藏输入?
-
也许这是个好主意。这是一个后备想法,因为我认为它会存在一个更清洁的想法。请将其扩展为答案,并为社区提供解释和示例。
-
也许这也可能是使用
preventDefault和stopImmediatePropegation的问题。 -
不,这个问题与他们无关。我解释了这个问题:
form.submit()没有发送任何按钮(我还解释了为什么这种行为甚至可能对我的网站有害)并且我寻找一种解决方法来通过 javascript“添加该按钮”(实际上,没有做 ajax询问)。 @kkhugs 是对的,我接受了他的建议。我只是等到他把它作为答案,因为它运作良好。
标签: javascript php jquery forms yii