Magento:如何添加onsubmit到表单

时间:2014-09-15 17:02:05

标签: magento

我在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添加函数。

感谢您的帮助!

1 个答案:

答案 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
        );
    }
}