2009-07-25 4 views
0

Эта проблема удивляет меня, потому что она не работает и в Chrome. Хром!!
В любом случае у меня есть 3 блока выбора, A, B, C. При загрузке страницы B и C скрыты. (Это хорошо во всех браузерах). В настоящее время у меня есть обработчик событий, привязанный к определенным значениям в поле A, так что, если щелкнуть значение, B показывает себя заполненными результатами в соответствии с A. То же самое для C: если щелкнуть значение в B, C покажет себя ,
Однако этот эффект «show» возникает только в firefox - Chrome и IE запутаны.Эффект JQuery, работающий в firefox; not chrome/ie

Любые предложения? намеки? Вот код:

$(document).ready(function() { 
    $("#B").hide(); 
    $("#C").hide(); 
    $('select#A option').each(function() { 
     $(this).click(function() { 
       $.getJSON(stuff, callback(data)); 
      }); 

    }); 

}); 
function callback(data) { 
    // alert("hi"); // This isn't working for Chrome/IE! so the callback isn't called 
    $("#B").show(); // This isn't working for Chrome/IE! 
}; 

EDIT: Оказывается, «выберите # Опция» - вариант учета "тег был глючный один. После изменения моего обработчика, чтобы «изменить», я смог отлаживать и отлаживать, пока я просто не удалял тег опции - все, кажется, работает сейчас.

Спасибо,
Майкл

+1

Выполняет ли запрос ajax на сервер? будет ли alert() в начале callback() работать? и после $ ("# B"). show()? – Javier

+0

Это не (для Chrome/IE) – Dirk

+0

Звучит как проблема с запятой в запятой где-то в вашем коде. Чтобы проверить поиск следующего шаблона regexp: /, \ s * [\] \}]/ –

ответ

4

Реальная проблема заключается в следующей строке:

//... 
$.getJSON(stuff, callback(data)); 
//... 

Вы не передавая функцию обратного вызова, вы на самом деле выполнения функции и передачи undefined, поскольку он не возвращает ничего.

Вы должны пройти только ссылку функции:

//... 
$.getJSON(stuff, callback); 
//... 

Или использовать анонимную функцию на месте:

//... 
$.getJSON(stuff, function(data){ 
    $("#B").show(); 
}); 
//... 

Edit: я не заметил, о том, что обработчик щелчка вы пытаетесь назначить, я рекомендую вам использовать событие change на элементе select, чтобы убедиться, что выбран вариант:

$(document).ready(function() { 
    $("#B,#C").hide(); 

    $('select#A').change(function() { 
    $.getJSON(stuff, function(data) { $("#B").show();}); 
    }); 
}); 
+0

+1 для обратного вызова я не видел, но даже без вызова $ .getJSON похоже, что клик по-прежнему не выбран IE или Chrome – ak3nat0n

2

Я думаю, что вы можете иметь дополнительные закрывающие скобки в конце функции обратного вызова.

UPDATE:

Похоже, светлячок может выбрать событие щелчка для опции, но не IE. Я не знаю, для хром, но это может быть та же проблема. Вместо прослушивания события клика по опции вы можете просто использовать событие change для отслеживания изменения в выборе.

вы можете сделать следующее, если событие изменения соответствует тому, что вы пытаетесь сделать.

$(document).ready(function() { 
$("#B").hide(); 
$("#C").hide(); 
$('select#A').each(function() { 
    $(this).change(function() { 
      $.getJSON(stuff, callback(data)); 
     }); 

}); 

}); функция обратного вызова (данные) {

$("#B").show(); 

};

Обратите внимание, как я слушаю событие изменения на самом Select. Надеюсь, это поможет!

+0

Извините; Typo ------ – Dirk

+0

Возможно ли, что callback не вызван? вы отлаживали код javascript с помощью firebug, чтобы узнать, вызвана ли функция обратного вызова? – ak3nat0n

+0

uh .... Как использовать firebug в Chrome? – Dirk

0

Если вы поставили предупреждение в свою функцию обратного вызова, оно будет показано?

+0

Это не для IE/Chrome – Dirk