默认值脚本在IE7中不起作用

时间:2011-10-29 13:42:46

标签: javascript jquery internet-explorer default-value

我正在使用以下默认值脚本,该脚本在我测试过的除IE7之外的所有浏览器中都有效,其中默认值未显示在“名称”字段中(它应显示“名称”)。

我在IETester中运行了该页面,它在};下的'name[]': 'Name',行上显示了错误:“预期的标识符,字符串或数字”。我不知道如何解决这个错误。

编辑:'Name'之后移除逗号后,此错误现已消失,但我仍然没有在IE7中看到默认值。你可以在this page上看到我的意思。

有人可以帮忙吗?

谢谢,

尼克

<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>

2 个答案:

答案 0 :(得分:1)

  

它在错误上给出了错误:“预期的标识符,字符串或数字”;在'name []'下:'Name',。我不知道如何解决这个错误。

IE在这里的尾随逗号上窒息:

var defaults = {
        'name[]': 'Name',
    };

IIRC,根据ECMAScript标准是合理的。无论如何,只需删除尾随的逗号即可。

答案 1 :(得分:0)

(我正在回答你的另一个问题大声笑)

首先你正确地说逗号打破了它,这是不正确的JSON语法。

其次,不支持IE 8及以下版本(我很想说根本不支持IE,因为它很糟糕,但显然大多数互联网仍在使用它)

第三,您需要对此进行调试才能弄明白,看一下Parsing JSON(我想是$ .parseJSON())。

我可以向你展示错误的错误以及如何做到这一点,但通过在浏览器中打开控制台并使用console.log(VARIABLE)来花些时间来练习调试javascript是值得的。在你的JS中。或者在不同时间使用警报(VARIABLE)。

例如

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