私はかなり単純なデモアプリに取り組んでいます。3 つの入力ドロップダウン ボックスがslideDown()
連続して使用されて表示され (これchange()
は前のドロップダウンで発生します)、1 つが AJAX 要求を使用して次の値を決定します。
これは Chrome と Firefox では問題なく動作しますが、IE (9 でも) は 2 番目のドロップダウン (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');
});
}
});
このドロップダウン ( where id="specialty"
) を変更すると、AJAX を介して (JSON で) 返された値が.toppings
入力を満たし、それを ( でslideDown()
) 明らかにするはずであることがわかります。しかし、IE では...サイコロはありません。
本当に奇妙なのは、IE の開発ツールを起動して Javascript をいじり始めると (ブレークポイントの設定、コンソールの使用など)、期待どおりに動作し始めることです。開発ツールを開くだけでも、そのウィンドウが開くとすぐに機能し始めます。一体何?
ここで奇妙なことが起こっています。何か案は?