вопрос сафари о JavaScript - PullRequest
       27

вопрос сафари о JavaScript

1 голос
/ 25 октября 2010

прикрепленный javascript не работает в сафари.

этот сценарий отображает подтверждающее сообщение перед переходом с текущей страницы.

неожиданно это работает впервые в сафари (но не во время последующей отправки).

Сценарий:

  • пользователь вносит некоторые изменения и нажимает кнопку подтверждения
  • подтверждающее сообщение, отображаемое пользователю
  • пользователь решил нажать кнопку отмены, чтобы вернуться на ту же страницу
  • но послесловие пользователь не может снова вызвать submit.
  • кнопка отправки не работает.

P.S .: Этот код прекрасно работает с другим браузером, т.е. IE7 / 8, FireFox.

 function checksave() {
  if (formIsDirty(myForm)) {
   return "The form has been changed...";
  }
 }

 function formIsDirty(form) {
  for (var i = 0; i < form.elements.length; i++) {
   var element = form.elements[i];
   var type = element.type;
   if (type == "checkbox" || type == "radio") {
    if (element.checked != element.defaultChecked) {
     return true;
    }
   }
   else if (type == "hidden" || type == "password" || type == "text" ||
     type == "textarea") {
    if (element.value != element.defaultValue) {
     return true;
    }
   }
   else if (type == "select-one" || type == "select-multiple") {
    for (var j = 0; j < element.options.length; j++) {
     if (element.options[j].selected !=
     element.options[j].defaultSelected) {
      return true;
     }
    }
   }
  }
  return false;
 }

<body OnBeforeUnload ="return checksave();">
 <form id="myForm" >
  <table border="1">
   <tr> <td>Enter Text:</td><td><input id="text1" type="text" value=""/> <br/> </td></tr>
   <tr> <td><input id="button1" type="submit" value="Submit1"/> <br/> </td> <td><input id="button2" type="submit" value="Submit2"/> <br/> </td></tr>
  </table>
 </form>
</body>

1 Ответ

0 голосов
/ 25 октября 2010

Да, это ошибка в WebKit, хотя, похоже, она исправлена ​​в текущих версиях Chrome для меня.

Похоже, когда отправка формы отменяется из приглашения до загрузки, все формы на странице перестают передаваться (событие submit по-прежнему срабатывает, но отправка не перемещается), пока не будет изменено любое поле формы на странице. (Это не имеет ничего общего с вашей собственной проверкой изменения формы. Сам браузер блокирует навигацию до тех пор, пока не заметит изменения. Может быть, какая-то хитрость предотвращения множественной отправки формы пошла не так, или что-то в этом роде?)

Обычно вы этого не замечаете, так как обычно вы устанавливаете другой обработчик на form.onsubmit, который закорачивает onbeforeunload (поскольку, как правило, если пользователь щелкает, чтобы отправить форму, он знает они что-то изменили и хотят сохранить изменения).

(Между прочим, избегайте использования myForm в качестве глобальной переменной для ссылки на элемент с id="myForm. Это хак IE, который некоторые другие браузеры теперь реализовали, но только в режиме Quirks, и вы don ' t хотите быть в режиме Quirks. Добавьте объявление <!DOCTYPE> и используйте document.getElementById('myForm').)

...