使用prototype.js停止表单提交

时间:2013-03-25 10:44:50

标签: javascript forms prototypejs

似乎有一个问题或我缺乏知识如何停止使用prototypejs提交表单。也许有人可以帮我解决我面临的问题

考虑这个简单的表格

<form id="formContact" method="post">
    <p>Name:
        <br />
        <input type="text" id="name" name="yourName" size="20" />
    </p>
    <p>E-mail:
        <br />
        <input type="e-mail" name="yourEmail" size="20" />
    </p>
    <p>Message:
        <br />
        <textarea cols="20" rows="10" name="yourMessage"></textarea>
    </p>
    <p>
        <input type="submit" value="Submit this form" name="submitButton" />
    </p>
</form>

来自原型手册http://prototypejs.org/doc/latest/dom/Event/stop/

的这个小js片段
Event.observe('formContact', 'submit', function (event) {
    var login = $F('name').strip();
    if ('' == login) {
        Event.stop(event);
        // Display the issue one way or another
    }
});

$('formContact').submit();

这一切都在小提琴中:http://jsfiddle.net/C3eFu/2/

现在问题在于,如果单击按钮,它会完美地停止表单,但是当使用javascript提交表单时不会。 这是原型未能阻止事件的1%吗?

2 个答案:

答案 0 :(得分:1)

根据很多Googleing显然,在调用.submit()方法时,表单上没有触发onsubmit事件。这不是缺少PrototypeJS,而是更多的Javascript中尚未解决的行为。

您可以通过调用onsubmit处理程序,然后观察事件是否已停止然后决定触发提交method()

,使代码按照您希望的方式运行

答案 1 :(得分:1)

简单的方法是将type="submit"更改为type="button"然后捕获按钮的click事件,或者您可以捕获提交事件:

function stopDefAction(evt) {
     evt = evt || event;
     if (evt.preventDefault) {
          evt.preventDefault();
     }
     else {
          evt.returnValue = false;
     }
}

请参阅:Stop Event in IE 9 (without upgrading to Prototype 1.7)