Вопрос

Прилагаемый JavaScript не работает в Safari.

Этот скрипт отображает сообщение подтверждения перед навигацией от текущей страницы.

Удивительно это работает впервые в Safari (но не во время последующего представления).

Сценарий:

  • Пользователь делает некоторые изменения и нажмите кнопку отправки
  • Сообщение подтверждения отображается пользователю
  • Пользователь решил нажать кнопку «Отмена», чтобы остаться на той же странице
  • Но Useword пользователь не может вызвать представление снова.
  • Кнопка отправки не работает.

PS: этот код отлично работает с другом браузером IE 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>
Это было полезно?

Решение

Да, это ошибка В WebKit, хотя тот, который, кажется, фиксируется в нынешних вариантах хромированных версий для меня.

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

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

(Кстати, избегайте использования myForm как глобальная переменная для ссылки на элемент с id="myForm. Отказ Это то есть взломать, что некоторые другие браузеры теперь реализованы, но только в режиме quirks, а вы нет Хотите быть в режиме причуда. Добавить <!DOCTYPE> Декларация и использование document.getElementById('myForm').)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top