我在local.xml中添加了带有函数的javascript文件。我创建了一个自定义字段类型的表单。它与multiselect类似,但它是自定义的(我使用自己的类来渲染它)。我想在提交表单之前选择此字段中的所有选项(在提交事件中),但我无法使其工作。
我想每个人都知道如何在xml中添加javascript文件以及如何将自定义字段类型添加到表单中,所以我将跳过这些文件。
这是我的表单文件:
class MyNamespace_MyModule_Block_Adminhtml_Form_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
/**
* Preparing form
*
* @return Mage_Adminhtml_Block_Widget_Form
*/
protected function _prepareForm()
{
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
'method' => 'post',
'onsubmit' => "selectAllOptions(document.getElementById('MY_FORM_FIELD_NAME'))", // <---- this on submit doesn't work
)
);
$form->setUseContainer(true);
$this->setForm($form);
return parent::_prepareForm();
}
}
这是SelectAllOptions函数
function selectAllOptions(obj) {
if (!obj.options.length) {
return;
}
for (var i=0; i<obj.options.length; i++)
{
obj.options[i].selected = true;
}
}
我能够在Firebug控制台中调用此函数,它可以这样工作。但是当我以magento形式按下Save按钮时,甚至没有执行此功能 我认为这是因为所有的magento按钮都是这样的:
<button style="" onclick="editForm.submit();" class="scalable save" type="button" title="Test" id="id_822f4065958eef93a184bed0e17ab443"><span><span><span>Test</span></span></span></button>
由于方法 onclick =&#34; editForm.submit()&#34; ,我的功能未被触发。
我刚刚开始学习magento,如果一些经验丰富的开发人员告诉我如何使用onsubmit,我会很高兴。
我检查了Varien_Data_Form类,并且有方法
/**
* Return allowed HTML form attributes
* @return array
*/
public function getHtmlAttributes()
{
return array('id', 'name', 'method', 'action', 'enctype', 'class', 'onsubmit');
}
因此应该允许向onsubmit添加函数。
感谢您的帮助!
答案 0 :(得分:0)
我认为诀窍是覆盖按钮上的onsubmit
,因为这会导致问题,而这种情况发生在表单的容器中,而不是表单本身。
class MyNamespace_MyModule_Block_Adminhtml_Form_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
/**
* Need to change save button here
*/
protected function __construct()
{
parent::__construct();
$this->updateButton(
'save',
'onsubmit',
"selectAllOptions($('MY_FORM_FIELD_NAME'));"
// in Prototype $ is equivalent to document.getElementById
);
}
}