Сценарий значения по умолчанию не работает в IE7

#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');
            }
        });
    };