#javascript #jquery #internet-explorer #default-value
#javascript #jquery #internet-explorer #значение по умолчанию
Вопрос:
Я использую следующий скрипт со значением по умолчанию, который работает во всех браузерах, которые я тестировал, кроме IE7, где значение по умолчанию не отображается для поля ‘Name’ (оно должно показывать ‘Name’).
Я запустил страницу в IETester, и она выдала ошибку: «Ожидаемый идентификатор, строка или число» в строке с };
under 'name[]': 'Name',
. Однако я не знаю, как исправить эту ошибку.
РЕДАКТИРОВАТЬ: теперь эта ошибка исчезла после удаления запятой после 'Name'
, но я все еще не вижу значения по умолчанию в IE7. Вы можете увидеть, что я имею в виду на этой странице.
Может кто-нибудь помочь с этим?
Спасибо,
Ник
<script>
$(function() {
var defaults = {
'name[]': 'Name',
};
// separating set and remove
// note that you could add "defaults" as an arg if you had different
// defaults for different fieldsets
var setDefaults = function(inputElements) {
$(inputElements).each(function() {
var d = defaults[this.name];
if (d) {
// set with jQuery
// we don't need the data - just check on the class
$(this).val(d)
.addClass('default_value');
}
});
};
var removeDefaults = function(inputElements) {
$(inputElements).each(function() {
if ($(this).hasClass('default_value')) {
$(this).val('')
.removeClass('default_value');
}
});
};
setDefaults(jQuery('form[name=booking] input'));
// Toggles
$('form[name=booking]').delegate('input', {
'focus': function() {
removeDefaults($(this));
},
'blur': function() {
// switch to using .val() for consistency
if (!$(this).val()) setDefaults(this);
}
});
});
</script>
Комментарии:
1. Это простая отладка; слышали о
alert()
ней? Вставив несколько из них, вы увидите, в чем проблема.2. @Matt Нет, я не слышал о alert() . Я только что запустил страницу в IETester, и она выдала ошибку: «Ожидаемый идентификатор, строка или число» в строке с
};
under'name[]': 'Name',
. Однако я не знаю, как исправить эту ошибку.
Ответ №1:
и он выдал ошибку: «Ожидаемый идентификатор, строка или число» в строке с }; под ‘name[]’: ‘Name’,. Однако я не знаю, как исправить эту ошибку.
IE задыхается от конечной запятой здесь:
var defaults = {
'name[]': 'Name',
};
IIRC, по праву в соответствии со стандартом ECMAScript. В любом случае, просто удалите конечную запятую, и это сработает.
Комментарии:
1. Спасибо, ошибка теперь исчезла в IE7, но я по-прежнему не вижу значения по умолчанию ‘Name’ в текстовом поле Name. Вы можете понять, что я имею в виду, если посетите эту страницу в IE7. Во всех других браузерах он отображается.
Ответ №2:
(Я отвечаю на другой ваш вопрос, лол)
Во-первых, вы правы, сказав, что запятая сломала его, это был неправильный синтаксис JSON.
Во-вторых, не поддерживает IE 8 и ниже (у меня возникает соблазн сказать, что он вообще не поддерживает IE, потому что он отстой, однако, по-видимому, большая часть Интернета все еще использует его)
В-третьих, вам нужно отладить это, чтобы понять это, посмотрите на синтаксический анализ JSON (я думаю, $.parseJSON()).
Я мог бы точно показать вам, что не так и как это сделать, но более чем стоит потратить некоторое время на отладку javascript, открыв консоль в вашем браузере и используя console.log(ПЕРЕМЕННАЯ); в вашем JS. Или с использованием alert (ПЕРЕМЕННОЙ) в разное время).
например
var setDefaults = function(inputElements) {
$(inputElements).each(function() {
var d = defaults[this.name];
alert(d);
if (d) {
// set with jQuery
// we don't need the data - just check on the class
$(this).val(d)
.addClass('default_value');
}
});
};