Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Отмена отправки формы. Фигня какаято :( (https://javascript.ru/forum/dom-window/25066-otmena-otpravki-formy-fignya-kakayato.html)

lolka84 24.01.2012 12:50

Отмена отправки формы. Фигня какаято :(
 
Привет. Есть следующее:
<form onSubmit="return func('1');">
...
</form>


function func(x) {
  switch(x) {

    .....

    case "1":
      ...
      if(...) { return false; }
      break;

    .....

  }
}


Непойму, почему при срабатывании "if(...)" форма все равно отправляется ?:(

melky 24.01.2012 13:16

используйте другие способы отмены действия по-умолчанию, ваш способ устарел.

lolka84 24.01.2012 13:20

Какие методы используете Вы ?:)

melky 24.01.2012 16:28

form.attachEvent \ form.addEventListener.

но можно и ограничиться form.onclick

lolka84 24.01.2012 18:05

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

FINoM 24.01.2012 18:23

Цитата:

Сообщение от melky
ваш способ устарел.

Эм? Я понимаю, что человек не прав с пиханием кода в атрибут, но чем такой подход устарел в общем?
form.addEventListener('submit', function(){return false;});

NoResponse 24.01.2012 22:00

кажись поэтому
<form onsubmit="return func('1');">

FINoM 24.01.2012 22:43

Цитата:

Сообщение от NoResponse
кажись поэтому

HTML не регистрозависимый.

melky 25.01.2012 00:35

http://jsfiddle.net/WUa4Y/

сами протестите. работает. выкладывайте полный код на jsfiddle.

lolka84 25.01.2012 08:47

Блин, неоднократно взорвал себе мозг, нечего не понимаю, офигеть я чайник :(

В функции запускается ajax запрос, условие if() - это выдергивание нужного ответа сервера, т.е.
function func(x) {

  switch(x) {

    .....

    case "1":
      ...

      XMLHttp.onreadystatechange = function() {
        if (XMLHttp.readyState == 4) {
          if (XMLHttp.status == 200) {
            if (XMLHttp.responseText == "FAIL") { 
              alert("Ошибка"); return false;  
            }
          }
        }
      }

      break;

    .....

  }

}

Alert вылазит, но форма все равно отправляется, как будто return false; вовсе нет.

Попробывал так:
function func(x) {

  switch(x) {

    .....

    case "1":
      ...

      XMLHttp.onreadystatechange = function() {
        if (XMLHttp.readyState == 4) {
          if (XMLHttp.status == 200) {
            if (XMLHttp.responseText == "FAIL") { 
              alert("Ошибка"); x = false;  
            }
            else { x = true; }
          }
        }
      }

      break;

    .....

  }
  return x;
}

Но за пределами XMLHttp.onreadystatechange = function() переменная x неопределена :(

Как заставить работать эту конструкцию ? :(


Часовой пояс GMT +3, время: 11:55.