2013-08-27 24 views
3

我有一點點這樣的代碼:爲什麼Internet Explorer的停止功能後,當使用event.preventDefault()或返回false

$("input#checkbox").change(changeCheckbox); 

function changeCheckbox() { 

    var inputCheck = $("input#checkbox"), 
     button = $("input#button"); 

    if (inputCheck.is(":checked")) { 

     button.hide(); 

    } else { 

     button.show(); 
    } 
} 

在所有現代瀏覽器這項工作完善和IE 8

但當我用這一個與event.preventDefault();

$("input#checkbox").change(changeCheckbox); 

function changeCheckbox(event) { 

    event.preventDefault(); // <-- Here 

    var inputCheck = $("input#checkbox"), 
     button = $("input#button"); 

    if (inputCheck.is(":checked")) { 

     button.hide(); 

    } else { 

     button.show(); 
    } 
} 

或者我設置return false;

$("input#checkbox").change(changeCheckbox); 

function changeCheckbox() { 

    var inputCheck = $("input#checkbox"), 
     button = $("input#button"); 

    if (inputCheck.is(":checked")) { 

     button.hide(); 

    } else { 

     button.show(); 
    } 

return false; // <-- Here 
} 

則函數僅一次,我在(只)的Internet Explorer 8

多做自認倒黴有人能向我解釋,爲什麼出現這種情況?

,我有很多其他的功能,並使用與event.preventDefault();return false;類似的代碼在年底有好......

我使用這個jQuery的版本:jquery_1.10.1.min.js

提前感謝!

+0

您的意思是處理程序不會再次觸發,隨後的點擊將不會執行任何操作?請更具體地說「*我什麼都不能做*」。 – Bergi

+0

@Bergi - 在這個例子中,我不能在調用函數後檢查複選框一次 – aldanux

+2

@ dqf13g32g那麼,這是'type =「複選框的默認操作 - 它在checked和unchecked之間切換。防止它指示它不要改變。或者,我誤解了你的評論? –

回答

4

有人能向我解釋,爲什麼出現這種情況?

這是Internet Explorer中的一個bug(還有什麼)。 The change event is supposed to be not cancelable,與click事件(參見Is event.preventDefault cancelling change events?,jQuery/Javascript: Click event on a checkbox and the 'checked' attributeWhy does preventDefault() on a parent element's click 'disable' a checkbox?)相反。但是,IE8會阻止複選框在取消change事件時被(取消)檢查。 Try it here

如何解決該問題?只需從您的代碼中刪除e.preventDefault()(or return false)。無論如何我沒有看到任何理由使用它。

0

您可以爲IE8添加以下代碼:

if (event.preventDefault) event.preventDefault(); 
else event.returnValue = false; 

由於您使用jQuery,您可以使用內置的跨瀏覽器事件的解決辦法:

event = $.event.fix(event); 

參見:http://www.jquerysdk.com/api/jQuery.event.fix

+0

他使用jQuery,所以'preventDefault'很好。 – Bergi

+0

但是jquery_1.10.1支持舊IE嗎? – Musa

+1

@Musa [是的](http://jquery.com/browser-support/)。它的2.x不支持IE 8及以上版本。 –

1

你想實現的是根據#checkbox的值顯示/隱藏#button。你可以這樣做。代碼非常少的線路相比,你的代碼

$('#checkbox').on('change', function() { 
    $('#button').toggle(this.checked); 
}); 

FIDDLE

相關問題