2013-03-21 67 views
1

爲什麼下面的代碼無法正常工作。我阻止對事件的默認操作。然後,我想要檢查框。後,我爲什麼不能檢查與jQuery的盒子?

HTML

<input type="checkbox" class="checkbox" /> 

javsacript

$('.checkbox').click(function(e) { 
    e.preventDefault(); 
    // some logic happens... now i may decide to check the box (in this case we want to check it for testing) 
    $('.checkbox').prop('checked',true); 
}); 

你會覺得點擊複選框仍然勾選..但它does not。檢查小提琴,看看我的意思。

http://jsfiddle.net/5KDH8/

我也使用attr功能沒有任何的運氣嘗試。

+0

我相信點擊是被瀏覽器捕獲的焦點。如果你再次點擊(當它被聚焦),它可能會工作? – 2013-03-21 20:10:04

+0

你有某種當複選框被選中作爲在asp.net運行在服務器端的代碼? – 2013-03-21 20:32:13

回答

2

你必須把那臺在一個單獨的事件循環「選中」屬性的代碼:

setTimeout(function() { $('.checkbox').prop('checked', true); }, 1); 

瀏覽器或磁帶庫具有未設置的事件處理程序返回後的複選框,因爲它將它所響應點擊被調用的處理之前。

+0

謝謝!這個工作,但它似乎很哈克:( – Roeland 2013-03-21 20:19:43

+0

@Roeland是的,我同意。但是它的排序的想要做一件奇怪的事。如果你想「點擊」結束了離開復選框選中,爲什麼不跳過調用' .preventDefault()' – Pointy 2013-03-21 20:26:18

+0

以及我的代碼中存在該複選框不應該被點擊更新情況 – Roeland 2013-03-21 20:34:29

0
$('.checkbox').click(function(e) { 
    // do some logic that returns true or false 
    if (!mylogic) { 
     return false; 
     // returning false will prevent the checkbox to be checked. 
    } 
}); 
相關問題