Форма изменения JavaScript при отправке динамически

У меня есть форма с некоторыми действиями и значениями onsubmit, которые отправляются через входной тег отправки. Проблема в том, что он должен быть представлен двумя кнопками, поэтому я написал функцию для второй кнопки, чтобы изменить действие и значения onsubmit формы:

<a href="javascript:submitCompare()" class="submit">Compare</a>

function submitCompare()
{
    document.myForm.action = "anotherAction.php";
    document.myForm.onsubmit = function() {return countChecked()};
    document.myForm.submit();
}

function countChecked()
{
  var n = $(".reports input:checked").length;
  if (n >= 3 ) {
    alert ('You must select less than 3 reports.');
    return false;
  }
  else return true;
}

После нажатия на ссылку «Сравнить» она правильно отправляет меня на страницу AnotherAction.php, но даже если у меня установлено более двух флажков (что является правилом проверки). Может ли кто-нибудь помочь мне заставить функцию onsubmit работать правильно?


person user1507558    schedule 06.07.2012    source источник
comment
Просто примечание, я думаю, что (n > 2) достаточно вместо (n >= 3)   -  person codingbiz    schedule 06.07.2012


Ответы (3)


В submitCompare() вы явно и безоговорочно вызываете

 document.myForm.submit();

То, что вы, вероятно, хотите, вместо этого есть

 if (countChecked()) {
   document.myForm.submit();
 }
person Otto Allmendinger    schedule 06.07.2012
comment
Большое спасибо, таким образом, это упрощает всю идею и действительно работает! - person user1507558; 06.07.2012

document.myForm.onsubmit = function() {return countChecked()};

должно быть

document.myForm.onsubmit = function( e ) {
   e = e || window.event;
   if ( !countChecked() ) {
       e.preventDefault();
       e.returnValue = false;
   }
};

Возврат false при отправке просто завершит дальнейшее выполнение функции. Вы хотите предотвратить отправку по умолчанию, если вы не хотите, чтобы она отправлялась.

person Trevor    schedule 06.07.2012
comment
Пробовал, но поведение процесса отправки не изменилось. - person user1507558; 06.07.2012
comment
Возможно, это ваша функция countChecked. попробуйте сделать какой-нибудь console.log, чтобы увидеть, получает ли он правильное количество отмеченных флажков - person Trevor; 06.07.2012
comment
countChecked() вернул правильные значения. Я действительно не знаю, почему ваше решение не сработало, но @Otto Allmendinger понял это правильно для меня, так что дело закрыто :) - person user1507558; 06.07.2012

Это поздний ответ, но если кто-то еще смотрит на это...

вместо:

document.myForm.onsubmit = function() {return countChecked()};

Я думаю, вы хотели:

document.myForm.setAttribute("onsubmit", "return countChecked()");
person Vlad    schedule 09.08.2014
comment
Вы сэкономили мое драгоценное время в последнюю минуту - person FatherMathew; 29.04.2017