2012-01-10 3 views
2

Я это JQueryпочему IE нужно для меня дважды щелкнуть

$('.billing_info').click(function(e){ 
     e.preventDefault(); 
     if(($('.shipping_selection').length) > 0){ 
      if ($('.shipping_selection:checked').length == 0){ 
       $('.hide_error').show(); 
       $("html, body").animate({ scrollTop: $(".hide_error").offset().top }, "slow"); 
       $(".hide_error").effect("highlight", {}, 4000); 
       return false; 
      }else{ 
       $('.billing_info').unbind("click"); 
       $('.billing_info').click(); 
      } 
     }else{ 
      $('.billing_info').unbind("click"); 
      $('.billing_info').click(); 
     } 
    }); 

который работает удивительным во всех браузерах, кроме IE. Я использую IE8, и пользователю нужно дважды щелкнуть по кнопке, чтобы кнопка приняла событие щелчка, даже если есть один переключатель $ ('. Shipping_selection') щелкнули

+0

Можете ли вы отладить его и посмотреть, что делает IE в каждом из этих кликов? Дважды срабатывает обработчик событий? Является ли клик пойман каким-то другим элементом на странице? – Rup

+0

есть инструмент типа firebug, который я могу использовать, что я могу сделать console.log – Trace

+1

Что такое .billing_info a ''? Добавьте свой HTML, чтобы мы могли получить полную картину. –

ответ

1

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

$('.billing_info').click(function(e){ 
    if(($('.shipping_selection').length) > 0 && $('.shipping_selection:checked').length == 0){ 
      e.preventDefault(); 
      $('.hide_error').show(); 
      $("html, body").animate({ scrollTop: $(".hide_error").offset().top }, "slow"); 
      $(".hide_error").effect("highlight", {}, 4000); 
      return false; 
    } 
}); 
+0

, который сделал трюк .... поразительное спасибо – Trace