使用mooTools提交表单,并将表单内联onsubmit event fire ... help

时间:2011-03-19 06:53:53

标签: javascript events forms mootools submit

我正在编写一个用自定义按钮替换文档中所有input type="button"input type="submit"的类,这实际上是一个填充在锚标签内的跨度,我已经写完了所有内容,并且它除了使用javascript提交表单时未触发内联onsubmit事件,所有工作都有效。

实际上,甚至写一个静态锚标记

<a href="javascript:void(0)" onclick="document.FORMNAME.submit();">Submit</a>

不会为表单触发内联onsubmit事件,但<input type="submit" />会触发事件...无论如何必须有一种方法可以使用javascript触发此onsubmit事件。

以下是我正在使用的内容片段:

click: function() {

    //get parent form
    var thisForm = this.getParent('form');

    //fire onsubmit event
    thisForm.fireEvent('submit'); //this doesnt work!

    //submit form...the event isn't fired here either!
    thisForm.submit();

}

有人有什么想法吗?这个类需要不需要配置,并且有一些旧网站使用我们想要插入的cms系统,并且在我们需要考虑的表单上有很多内联提交事件

由于

UPDATE,

我接受了这个建议并提出了这个建议:

if(this.getParent().onsubmit()) {
    this.getParent().submit();
}

完美地用于评估onsubmit事件中的表单并根据其输出提交表单,但如果该函数根本不存在该怎么办?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在表单上触发submit不会触发它的内联onSubmit,这是默认的javascript行为(找到:http://www.codestore.net/store.nsf/unid/DOMM-4QS3RL/

你可以尝试自己调用onsubmit,这对我有用:

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/mootools/1.3.1/mootools-yui-compressed.js"></script>
        <script type="text/javascript" charset="utf-8">
            window.addEvent('domready', function(e) {
               $$('span.submit').each(function(el) {
                  el.addEvent('click', function(e) {
                    this.getParent().onsubmit();
                  });
               });
            });
        </script>
    </head>
    <body>
        <form method="post" onsubmit="alert('hi');" class="form">
            <input type="text" value="test" />
            <span class="submit">Submit the form</span>
        </form>
    </body>
</html>

答案 1 :(得分:0)

您可能希望尝试使用此代码,因为它会检查onsubmit事件是否已作为事件侦听器附加,而不是作为硬编码属性。如果事件作为监听器附加,则[表单元素] .onsubmit()部分将不起作用。

    function myOnSubmit(formId){
        var f = document.getElementById(formId);
        if(document.createEvent){
            var e = document.createEvent('Event');
            e.initEvent('submit',true,false);
            f.dispatchEvent(e);
        } elseif(document.createEventObject){
            var e = document.createEventObject('Event');
            e.button = 1;
            f.fireEvent('onsubmit',e);
        } elseif(typeof(f.onsubmit) == 'function'){
            f.onsubmit();
        }
    }