Альтернатива для прослушивания ошибок / неправильного поведения браузера (НЕ отсутствие функций) - PullRequest
2 голосов
/ 11 октября 2011

Хорошо, мы все знаем, что нюхает браузер плохо .Я не собираюсь перефразировать всю дискуссию здесь, и ТАК не подходит для этого в любом случае.Я ищу решение проблемы, которая, по-видимому, не предлагает предложенную альтернативу обнаружения признаков.

В моем конкретном случае это было вызвано кодом, подобным следующему:

<form name="something" method="POST">
     <input name="input1"><input name="input2"> <!-- etc -->
     <input id="mysubmit" type="submit" value="Submit me">
</form>

<!-- during jquery initialization -->

$('#mysubmit').click(function() {
   sendAjaxRequestInsteadOfRealForm($('#input1').val(), $('#input2').val());
   return false;
});

Теперь я знаю, что реальный ответ здесь - «не используйте input type="submit" с привязками jQuery» (я полагаю, кроме submit).Но этот код работал, как и ожидалось, во всех наших «официально» поддерживаемых браузерах, и только когда у нас был пользователь, который случайно попробовал сайт в IE 7, это стало проблемой (а именно, он обошел привязку и отправил формупо старинке).

Мы не проводим тестирование в IE 7. Поэтому мы пытаемся использовать обнаружение браузера на нашей главной странице и предупреждаем пользователей, чей User-Agent указывает, что их браузер не поддерживается.Я не люблю делать это, но мне неясно, какова альтернатива.Я не могу придумать стратегию обнаружения функций, которая бы обнаруживала «позволяет привязкам кликов на кнопках отправки заменять фактическую отправку».Какой лучший подход здесь?

РЕДАКТИРОВАТЬ для пояснения: я не прошу альтернативы коду выше.Я знаю, что они есть.Я спрашиваю, как мне определить вышеупомянутый код как проблемный, чтобы он не попал в производственную среду, не проверяя его в IE 7.

1 Ответ

1 голос
/ 11 октября 2011

Перехватить событие кнопки по умолчанию?

$('#mysubmit').click(function() {
    event.preventDefault();  // don't let the click event happen
    sendAjaxRequestInsteadOfRealForm($('#input1').val(), $('#input2').val());
    return false;
});     
...