我试图在symfony2中实现提交按钮的isClicked()功能。我跟着documentation,但它对我不起作用。我总是假的。
形式:
$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);
}
}
我错过了什么吗?
答案 0 :(得分:1)
好的,这是愚蠢的。我很久以前就添加了这个脚本:
$("form").submit(function () {
$('[type=submit]', this).attr('disabled', true);
});
我用它来避免多次点击提交按钮。但是如果您的按钮被禁用,它将不会将其添加到发布请求中。这就是它失败的原因。 xurshid29解决方案对此问题没有帮助,因为当php不是请求的一部分时,php永远不知道点击了哪个按钮。
答案 1 :(得分:0)
我也遇到过这个问题,用一种不同的方式解决了这个问题:
$clickedButton = $productListForm->getClickedButton()->getName();
if ($clickedButton == 'enable') {
$product->setStatus(Product::STATUS_ENABLED);
}
if ($clickedButton == 'delete') {
$product->setDeleted(true);
}
编辑:
禁用的元素不会通过POST或GET方法发布。如果你想在提交中禁用双击,你可以创建一个提交按钮,用CSS隐藏它,创建另一个span或p元素,像提交按钮一样设置样式,附加一个litle 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();
});
});
答案 2 :(得分:0)
这是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;
});