【问题标题】:Yii and Javascript form submissionYii 和 Javascript 表单提交
【发布时间】: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 需要识别按钮需要以处理表单(特别是在批准和拒绝情况下)。

【问题讨论】:

  • 也许您可以使用隐藏输入?
  • 也许这是个好主意。这是一个后备想法,因为我认为它会存在一个更清洁的想法。请将其扩展为答案,并为社区提供解释和示例。
  • 也许这也可能是使用preventDefaultstopImmediatePropegation 的问题。
  • 不,这个问题与他们无关。我解释了这个问题:form.submit() 没有发送任何按钮(我还解释了为什么这种行为甚至可能对我的网站有害)并且我寻找一种解决方法来通过 javascript“添加该按钮”(实际上,没有做 ajax询问)。 @kkhugs 是对的,我接受了他的建议。我只是等到他把它作为答案,因为它运作良好。

标签: javascript php jquery forms yii


【解决方案1】:

如果你在表单中添加了隐藏的输入,你可以在提交表单之前使用 jQuery 修改输入值,如下所示:

$("#inputID").val('approve');

如果您想通过$(this).val() 将值设置为单击按钮的值,请注意可能导致IE 浏览器的问题,请解释here。第二个答案(后现代)有解决这个问题的方法。

【讨论】:

  • 感谢您的回答和警告:D 但是幸运的是,我不需要value,而只需要名称。 IE 还是很烂:(。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
相关资源
最近更新 更多