Мне не удалось воспроизвести эту ошибку в моих средах тестирования, но нам регулярно звонили клиенты, утверждая, что, по сути, событие выбора меню onChange
не может заполнить второе меню.Они выбирают первое меню, и оно зависает без создания второго меню, из которого нужно заполнить форму.
Я использую метод change()
, назначенный первому меню выбора, чтобы выполнить запрос Ajax насервер, чтобы получить второе меню, которое заполняется значениями, основанными на том, что выбрано в первом.Я использую jQuery 1.7.1, и этот метод успешен во всех моих средах тестирования.
Эти вызывающие стороны используют Firefox и IE на компьютерах с Windows;пока что нет звонков от пользователей Mac или пользователей Windows с другими браузерами.Я хотел бы получить от них больше информации, но эти пользователи довольно неопытны даже в том, как искать сообщение об ошибке в браузере.Я реализовал следующие исправления, рекомендованные в других решениях, опубликованных в StackOverflow и других платах, но все еще безуспешно:
- Отключите свойство cache в вызовах Ajax
- Использование $ ('.selectMenu'). change () вместо $ ('. selectMenu'). bind ('change', function () {...});
- Принудительное использование HTTPS в путях Ajax (так какэто в защищенной форме)
- Проверьте и убедитесь, что политика Ajax вызывает одно и то же происхождение
- Убедитесь, что метод change () заканчивается на
return false
, чтобы jQuery не пропускал событие
С этим вот мой код.Это довольно просто и соответствует стандартным примерам реализации методов jQuery change()
и ajax()
.Есть два выбора меню.Когда выбирается первый, он запускает Ajax-запрос на сервере для получения содержимого для второго меню на основе значения, выбранного в первом.
$('#Sections').change(function() {
$('#sectionsIndicator').css('display', 'block');
$.ajax({
async: true,
type: 'post',
url: 'https://example.com/getCategoriesMenu',
data: { id: $('#Sections').val() },
dataType: 'html',
cache: false,
success: function(data) {
$('#_categories').html(data);
$('#sectionsIndicator').css('display', 'none');
preview.update(); //render a preview of the whole form
},
error: function(xhr, status, error) {
var msg = "It appears an error has occurred while trying to update the Categories menu.";
msg += " Please try adjusting your security settings or refreshing this page before attempting to post this form.";
msg += " [ Status: " + status + " Error: " + error + " ]";
alert(msg);
}
});
return false;
});
Значение data
в случае успешногоAjax-запрос представляет собой меню HTML <select>
.Селектор #_categories
соответствует <div>
, обернутому вокруг второго меню выбора.
Как я уже говорил выше, я не могу вызвать ошибку во всех основных браузерах на Mac, Windows XP,Windows Vista и Windows 7.Но я не могу отрицать, что пользователи сообщают об остановке меню, как только они пытаются сделать выбор.