Symfony2 isClicked() always false


Symfony2 isClicked() always false

我正在尝试在symfony2中实现提交按钮的isClicked()功能。我遵循了文档,但它对我不起作用。我总是出错。

形式:

$builder
        ->add(
            'draft',
            'submit'
        );

控制器:

$form = $this->createForm(
        new PageType(),
        $page
    );
    $form->handleRequest($request);
    if ($form->isValid()) {
        // set status draft if draft button is clicked
        if ($form->get('draft')->isClicked()) {
            $page->setStatus(Page::STATUS_DRAFT);
        }
     }

我错过什么了吗?

好吧,这太愚蠢了。我很久以前就添加了这个脚本:

$("form").submit(function () {
    $('[type=submit]', this).attr('disabled', true);
});

我用它来避免多次点击提交按钮。但如果你的按钮被禁用,它不会将其添加到帖子请求中。这就是它失败的原因。xurshid29解决方案对这个问题没有帮助,因为php永远不会知道在不属于请求的情况下点击了哪个按钮。

我也遇到过这个问题,并用一种不同的方法解决了它,比如:

$clickedButton = $productListForm->getClickedButton()->getName();
if ($clickedButton == 'enable') {
    $product->setStatus(Product::STATUS_ENABLED);
}
if ($clickedButton == 'delete') {
    $product->setDeleted(true);
}

编辑:

禁用的元素不会通过POST或GET方法发布。如果你想在提交中禁用双击,你可以创建一个提交按钮,用CSS隐藏它,创建另一个span或p元素,将其设置为提交按钮的样式,并在其上附加一个小javascrpt以将事件传递给实际的提交按钮:

模板:

<div class="form-actions">
    <div class="disable-product">
        <input type="submit" <!-- other attributes --> class="element-hidden" />
        <p class="button-style">Disable</p>
    </div>
    <div class="remove-product">
        <input type="submit" <!-- other attributes --> class="element-hidden" />
        <p class="button-style">Remove</p>
    </div>
</div>

js:

jQuery(document).ready(function() {
    $('.button-style').on('click', function() {
        $(this).siblings('input').mousedown();
    });
});

是javascript把我搞糊涂了

$( '#form_accept' ).click(function( e ) {
    var confirmResponse3 = confirm('{{ 'popup.accept.body'|trans( {} , 'bundle' )|escape('js')  }}');
    if( confirmResponse3 == true ) {
        $(this).parents( 'form' ).submit();
    }
    return confirmResponse3;
});

当我提交表格手册时,Symfony并不知道。但是,当我删除if语句(如下面所示)时,效果很好。

$( '#form_accept' ).click(function( e ) {
    var confirmResponse3 = confirm('{{ 'popup.accept.body'|trans( {} , 'bundle' )|escape('js')  }}');
    return confirmResponse3;
});