IE与jQuery change / ajax事件的行为不一致

时间:2012-06-12 20:30:49

标签: php javascript jquery

我正在开发一个相当简单的演示应用程序。连续使用slideDown()显示三个输入下拉框(这在前一个下拉列表的change()上触发),并且一个使用AJAX请求来确定下一个值的值。

这在Chrome和Firefox中完美运行,但IE(甚至9)在第二个下拉列表中窒息 - 执行AJAX请求的下拉列表。

因为代码比单词更响亮:

$('#specialty').change(function() {
    if ( $(this).val() !== "(please select an option)" ) {
        $.ajax({
                type: "GET",
                url: "getValidToppings.php",
                data: { location: $(this).parent().prev().children('select').val() }
        }).done(function(data) {
            var mytoppings, toppingsSelectBox;

            console.log('return values: ' + data);

            data = $.parseJSON(data);

            toppingsSelectBox = $('#toppings');
            toppingsSelectBox.empty();

            // we use the value from the select box as a key in the dict of toppings returned
            // from the AJAX call
            mytoppings = data[$('#specialty').val()];

            toppingsSelectBox.append('<option>(please select an option)</option>')

            for (i in mytoppings) {
                toppingsSelectBox.append("<option>"+mytoppings[i]+"</option>");
            }

            toppingsSelectBox.parent().slideDown('slow', 'linear');
        });
    }
});

你可以看到当我更改这个下拉列表(id="specialty")时,通过AJAX(在JSON中)返回的值应该填满.toppings输入,然后显示它(带{ {1}})。但是,在IE中......没有骰子。

真正值得一提的是,如果我启动IE的开发工具并开始修补Javascript(设置断点,使用控制台等),它就会按预期开始工作。即使我只打开开发工具,只要该窗口打开,它就会开始工作。到底是什么?

这里发生了一些奇怪的事情。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

IE不知道“控制台”是什么,除非您打开开发工具。取出console.log你应该很好。还要确保你没有丢失任何分号,IE往往不喜欢它。