У меня есть следующие фрагменты кода.По сути, я пытаюсь сделать это с помощью функции первого щелчка, которая перебирает все кэшированные данные JSON и отображает любые значения, существующие для этого идентификатора.Во 2-й функции изменения я записываю всякий раз, когда один из элементов изменяет значения (т. Е. Да на нет и наоборот).
Все эти элементы генерируются динамически, хотя данные JSON я получаю от веб-службы.Из моего понимания, поэтому я должен использовать функциональность .live.
В Firefox все работает как положено (конечно).Однако в IE7 это не так.В IE7, если я выберу переключатель, который отображает предупреждение от функции щелчка, то он также добавляет в массив для измененной функции.Однако, если переключатель не делает ничего из функции щелчка, массив не добавляется для изменения.
Когда я смотрю на этот код, я думаю, что смогу объединить эти две функции вместе, однако сейчас я просто хочу, чтобы он работал в IE7.
$(document).ready(function () {
//This function is run whenever a 'radio button' is selected.
//It then goes into the CPItemMetaInfoList in the cached JSON data
//($.myglobals) and checks to see if there are currently any
//scripts to display.
$("input:radio").live("click", function () {
var index = parseInt(this.name.split(':')[0]);
for (i = 0; i <= $.myglobals.result.length - 1; i++) {
if ($.myglobals.result[i].CPItemMetaInfoList.length > 0) {
for (j = 0; j <= $.myglobals.result[i].CPItemMetaInfoList.length - 1; j++) {
if (index == $.myglobals.result[i].QuestionId) {
alert($.myglobals.result[i].CPItemMetaInfoList[j].KeyStringValue);
return;
}
}
}
}
});
});
$(document).ready(function () {
var blnCheck = false;
//Checks to see if values have changed.
//If a value has been changed then the isDirty array gets populated.
//This array is used when the questionSubmit button is clickeds
$('input').live('change', function () {
blnCheck = false;
for (i = 0; i <= isDirty.length - 1; i++) {
if (isDirty[i] == $(this).attr("name")) {
blnCheck = true;
break
}
}
if (blnCheck == false) {
isDirty[arrayCount] = $(this).attr("name");
arrayCount += 1;
alert($(this).attr("name"));
}
});
$('textarea').live('change', function () {
blnCheck = false;
for (i = 0; i <= isDirty.length - 1; i++) {
if (isDirty[i] == $(this).attr("id")) {
blnCheck = true;
break
}
}
if (blnCheck == false) {
isDirty[arrayCount] = $(this).attr("id");
arrayCount += 1;
//alert($(this).attr("name"));
}
});
});
ОБНОВЛЕНИЕ:
Мне пришлось переместить этот кусок кода в функцию щелчка:
blnCheck = false;
for (i = 0; i <= isDirty.length - 1; i++) {
if (isDirty[i] == $(this).attr("name")) {
blnCheck = true;
break
}
}
if (blnCheck == false) {
isDirty[arrayCount] = $(this).attr("name");
arrayCount += 1;
alert($(this).attr("name"));
}
Как это:
$(document).ready(function () {
//This function is run whenever a 'radio button' is selected.
//It then goes into the CPItemMetaInfoList in the cached JSON data
//($.myglobals) and checks to see if there are currently any
//scripts to display.
$("input:radio").live("click", function () {
var index = parseInt(this.name.split(':')[0]);
for (i = 0; i <= $.myglobals.result.length - 1; i++) {
if ($.myglobals.result[i].CPItemMetaInfoList.length > 0) {
for (j = 0; j <= $.myglobals.result[i].CPItemMetaInfoList.length - 1; j++) {
if (index == $.myglobals.result[i].QuestionId) {
alert($.myglobals.result[i].CPItemMetaInfoList[j].KeyStringValue);
return;
}
}
}
}
blnCheck = false;
for (i = 0; i <= isDirty.length - 1; i++) {
if (isDirty[i] == $(this).attr("name")) {
blnCheck = true;
break
}
}
if (blnCheck == false) {
isDirty[arrayCount] = $(this).attr("name");
arrayCount += 1;
}
});
});
Но ...
Мне пришлось оставить функцию изменения такой же.Из моего тестирования я обнаружил, что функция .click работала для IE7 для переключателей и элементов флажков, но функциональность .change работала для текстовых полей и текстовых областей в IE7 и FF, а также для исходной функциональности переключателей и элементов флажков.
Этот стал очень грязным.Спасибо @Patricia за просмотр.Здесь предложения действительно привели меня к этому решению.Я оставлю вопрос без ответа, так как думаю, что нет более чистого решения для этого.