2010-12-16 4 views
1

У меня странная проблема. Этот код отлично работает в chrome и firefox, но в IE 8 в прямом эфире я не запускаю первый раз, когда снимаю флажок. Если я проверю его, а затем снимите флажок, он будет работать каждый раз после этого.jquery live not firing on first click on the checkbox

Мой серверный код в представлении

<%: Html.CheckBox("select-invoice-" + invoice.InvoiceNumber, 
    true, 
    new { title = "choose to not pay anything on this invoice by unchecking this box" }) %> 

делает к этому

<input checked="checked" id="select-invoice-TST-1001" 
    name="select-invoice-TST-1001" 
    title="choose to not pay anything on this invoice by unchecking this box" 
    type="checkbox" value="true" /> 

Вот мой wireup Javascript живое событие, упрощенный

$(function() { 
    $("[id^='select-invoice-']").live('change', function() { 
     var invoiceId = $(this).attr('id').substr('select-invoice-'.length); 

     ComputeTotalPayment(); 

     if ($(this).is(':checked')) { 
      //save invoice data 
     } else { 
      //remove invoice data 
     } 
    }); 
}); 

Там нет ошибок в JavaScript в любом браузере. Если я переключу IE в режим совместимости, живое событие никогда не будет работать. Другие живые события для кликов по ссылкам работают очень хорошо.

ответ

3

Событие изменения не срабатывает корректно в IE до тех пор, пока флажок не теряет фокус.

Ошибка: http://webbugtrack.blogspot.com/2007/11/bug-193-onchange-does-not-fire-properly.html

Вам нужно сопоставить с «щелчок» события вместо этого.

+1

Я не знал, что это была известная ошибка. интересно. Я изменил клик, и все снова в мире. – Josh 2010-12-16 19:57:20

0

У меня была подобная проблема и разрешена, позвонив по телефону .change() раз на странице.

$(function() { 
$("[id^='select-invoice-']").live('change', function() { 
    var invoiceId = $(this).attr('id').substr('select-invoice-'.length); 

    ComputeTotalPayment(); 

    if ($(this).is(':checked')) { 
     //save invoice data 
    } else { 
     //remove invoice data 
    } 
}).change(); 
}); 
1

Я обнаружил, что изменение вызывает некоторые проблемы в IE. Вместо этого попробуйте использовать событие click. Похоже, проблема устранена.