2013-03-25 2 views
0

Кажется, что проблема или моя нехватка знаний о том, как остановить форму для отправки с prototypejs. Может быть, кто-то может помочь мне с вопросом я столкнулсяstopping form submit with prototype.js

считают эту простую форму

<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> 

и этот маленький фрагмент из JS Protoype руководства http://prototypejs.org/doc/latest/dom/Event/stop/

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/

Теперь проблема заключается в том, что он отлично останавливает форму, если кнопка нажата, но не когда форма отправлена ​​с помощью javas cript.? Это 1%, где прототип не может остановить событие?

ответ

1

В соответствии с большим количеством Google, по-видимому, событие onsubmit не запускается в форме при вызове метода .submit(). Это не недостаток PrototypeJS, а скорее поведение, которое не было исправлено в Javascript.

Вы можете сделать свой код вести себя так, как вы хотите, чтобы это произошло, вызвав onsubmit обработчик, а затем смотреть, если событие останавливается, а затем принять решение уволить представить method()

+0

это можно сделать с jquery без каких-либо проблем, поэтому я думаю, что это срабатывает, позвольте мне посмотреть, могу ли я сделать пример –

+0

, чтобы увидеть эту скрипту, которая использует jQuery, который может обрабатывать этот сценарий: http://jsfiddle.net/zTLC6/ –

+0

это 2 разных 'submit() '- в вашей первой скрипте с PrototypeJS вызываемый метод' submit() 'является фактическим методом объекта формы - против второй скрипки с jQuery метод' submit() 'является методом jQuery, который в конечном итоге запускает реальную форму объект метод. И FWIW в jQuery скрипке событий, которые были выпущены, были обратными комментариям в js. –

1

Простой способ изменить type="submit" к type="button" затем захватить событие щелчка кнопки вместо этого, или вы можете захватить представить событие:

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)

+0

К сожалению, я не могу изменить исходный код, но я могу включить javascript, так что это не способ решить мою текущую проблему. Это можно сделать с помощью jquery tho. Я продолжу поиск. –

+0

Вы используете JavaScript - вы можете изменить все, что захотите. –

+0

ситуация здесь различна, так как эта форма представлена ​​на разных событиях, привязанных к кнопкам (скрипка просто иллюстрирует это как фикцию с образцом формы), и я не могу манипулировать кнопками или dom для этого. –