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


IE is acting inconsistently with a jQuery change/ajax event

我正在开发一个相当简单的演示应用程序。 连续使用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输入,然后显示它(带有 slideDown())。 但是,在IE中...没有骰子。

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

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

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