CakePHP JavaScript确认对话框表单提交取消无效。

4

使用我的CakePHP注册表格,在点击提交按钮后,我希望简单地显示一个Javascript确认对话框,它应该像这样工作:

  • 如果按下“确定”,则应提交表单
  • 如果按下“取消”,则不应执行提交操作

但是,在这里,当我按下“取消”时,它仍然被提交了。不知道为什么?

CakePHP表格代码:

<?php echo $form->create('Noncompetitor', array('type' => 'file', 'url' => '/register', 'onSubmit' => 'confirmfrmSubmit();'));?> 

我的JS代码:

function confirmfrmSubmit(){

    var agree=confirm("Are you sure you wish to continue?");

    if (agree)
        return true ;
    else
        return false ;
}

请告诉我,如果你们有任何关于IT技术方面的想法。
谢谢!
6个回答

10

还有一种更简单的方法,可以尝试这样做:

$this->Form->create('Request',array('onsubmit'=>'return confirm("are you sure?");'))

1
最好使用上面的jQuery方法并将其放在单独的.js文件中。您应该尽可能地减少在HTML中使用JavaScript。 - bicycle
我完全同意@bicycle的观点。Obtrusive JS是一种不好的编程习惯。 - Daniel Wright

5

更新: 感谢 bicycle 修复了我的错误回调。详情见下文。(对于不允许答案作者最终接受编辑的 StackO,我表示抱怨。)


以下是使用 jQuery 的解决方案:

<?php
    $this->Html->scriptBlock("
        jQuery(function($){
            $('form.noncompetitor').submit(function(event){
                if (!confirm('Are you sure?')) { return false; }
            });
        });
    ",array('inline'=>false)); // inline => false will put this snippet in the DOM's head.

    echo $this->Form->create('Noncompetitor',array(
        'type'=>'file','url'=>'/register',
        'default'=>false,'class'=>'noncompetitor'
    ));

    /* The rest of your form */

我不想编辑,因为他们通常会拒绝它。但这一直要求确认。请将 `event.preventDefault(); if (confirm('Are you sure?')) { $(this).submit(); }` 替换为 `if (!confirm('Are you sure?')) { return false; }`。 - bicycle
还是被拒绝了。请参见http://stackoverflow.com/review/suggested-edits/2762110 - bicycle
2
哦,我本来以为我可以决定建议编辑的命运...我想我会自己进行编辑。我只是希望你能得到荣誉。 - Daniel Wright
哈哈哈,没关系,我已经习惯了。我的经验是,即使像这里一样显而易见的代码编辑也不会被批准。 - bicycle

2

我认为你的函数失败是因为你从未实际返回confirmfrmSubmit()的值。

尝试将return部分添加到onSubmit字段中,像这样:

<?php echo $form->create('Noncompetitor', array('type' => 'file', 'url' => '/register', 'onSubmit' => 'return confirmfrmSubmit();'));?>

您的JS代码应该是正常工作的,问题在于当onSubmit处理程序被调用时,确认值从未传递给表单。

附注:您可以在JS代码中执行以下操作:

return confirm("Text");

希望这能帮到你。

1

其实你一开始就已经完成了99%的工作.. 你只需要在调用验证函数之前加上'return'即可。

<?php echo $form->create('Noncompetitor', array(
       'type' => 'file', 
       'url' => '/register', 
       'onSubmit' => 'return confirmfrmSubmit();'));
?>

好的,我会做。


1

我找到了一个非常简单的解决方案:

<?php echo $form->create('ModelName', array('type' => 'file', 'url' => 'url', 'name' => 'frmRegister', 'onsubmit' => 'validatefrm(); return false;')); ?>

通过使用 onsubmit 函数,我只需简单地定义 'validatefrm(); return false;'

function validatefrm(){ // my condition, when i needs it to submitted document.frmRegister.submit(); return true; }

它运行得非常顺畅:)

如果这对您有帮助,请告诉我。


0

以下是步骤:

- 包含此jQuery文件 -

echo $this->Html->css('/css/jquery-confirm.min.css', ['block' => 'css']);

创建提交按钮

<?= $this->Form->button('<i class="fa fa-check"></i><span class="hidden-xs"> ' . __('Save') . '</span>', ['type' => 'submit', 'escape' => false, 'id' => 'submit_form_id', 'class' => 'btn green', 'title' => 'Save']); ?>



$('body').on('click', '#submit_form_id', function (e) {
            e.preventDefault();
                  var submitFormVar=1;
            if (submitFormVar!= 0) {
                $.confirm({
                    title: '',
                    content: 'Do you want to stop submit form' ,
                    buttons: {
                        ok: function () {
                            $(form).submit();
                        },
                        cancel: function (o) {
                            return o;
                        }
                    }
                });
            } else {
                $(form).submit();
            }
        });

Jquery 代码

  • 如果您想要提交表单,则值为0
  • 如果您不想提交表单,则值为1
  • 根据您的需求实现逻辑

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接