2012-04-03 27 views
1

我必須禁用並啓用三個複選框。 如果用戶點擊一個其他的將被禁用禁用除選定的複選框外的所有設備

<input type="checkbox" class="rambo" value='1' /> 45 
<input type="checkbox" class="rambo" value='2' /> 56 
<input type="checkbox" class="rambo" value='3' /> 56 

,所以我需要一個函數,讓我這個通過jQuery

感謝您的意見

+0

如果禁用其他複選框你將如何再次檢查?你需要爲這個用例使用單選按鈕。 – ShankarSangoli 2012-04-03 14:00:55

+0

@ShankarSangoli通過取消選中第一個。至少,這就是我在下面的答案中所假設的。 – 2012-04-03 14:02:03

+0

爲什麼不使用''而不是複選框? – Martin 2012-04-03 14:02:26

回答

6

對於這種功能,您應該查看使用radio buttons。與複選框相比,這些最適合用於互斥選項。

但是,如果你需要使用複選框,可以使用下列內容:

$(function(){ 
    $(".rambo").change(function(){ 
     $(this).siblings().attr("disabled", $(this).is(":checked")); 
    }); 
});​ 

http://jsfiddle.net/Curt/qGbtQ/1/


,這裏是一個解決方案,將取消所有,但選擇(如單選按鈕)

​$(function(){ 
    $(".rambo").change(function(){ 
     $(this).siblings().attr("checked", false); 
    }); 
});​ 

http://jsfiddle.net/Curt/qGbtQ/

+0

這不是OP的預期。 – ShankarSangoli 2012-04-03 14:04:37

+0

@ShankarSangoli哪個瀏覽器? – Curt 2012-04-03 14:05:10

+0

我的意思是OP的預期,當你點擊任何複選框時,其他人應該被禁用。 – ShankarSangoli 2012-04-03 14:06:09

1

你可以試試:

$('.rambo').click(function() { 
    if ($(this).attr('checked')) { 
     $(this).siblings().attr('disabled','disabled'); 
    } else { 
     $(this).siblings().removeAttr('disabled'); 
    } 
}​​);​ 

正如你所看到的this jsfiddle

2

試試這個:

$(".rambo").change(function() { 
    var $el = $(this); 
    if ($el.is(":checked")) { 
     $el.siblings().prop("disabled",true); 
    } 
    else { 
     $el.siblings().prop("disabled",false); 
    } 
}); 

Example fiddle

+0

只是好奇,爲什麼你把$(this)設置爲一個新的變種? – 2012-04-03 14:20:20

+2

緩存'$(this)'對象。從內存中檢索它要比讓jQuery創建一個新實例幷包裝對象快得多。每當你需要在一個函數中使用多個'$(this)'時,緩存它。 – 2012-04-03 14:21:56

+0

感謝羅裏也是完美的 – Simon 2012-04-03 15:25:23