2014-01-07 237 views
6

我對此鏈接有問題:Limiting default checked checkboxes限制/禁用/啓用複選框

我擴展了腳本驗證的代碼,下面是我想要做的。

  1. 我想要一個默認選中的複選框。
  2. 我想限制複選框的選擇,例如:如果mvp是3我應該選擇3並禁用複選框的其餘部分就像這樣。 Limit Checkbox
  3. 我想禁用提交按鈕,如果沒有達到選擇,例如,如果給定的最大數量是5。如果選擇未被選中,提交按鈕將不會被啓用。

這裏是我的示例代碼:

var mvp = 5; 

$(document).ready(function() { 


    $("input:checkbox").each(function(index) { 
     this.checked = (index < mvp); 
    }); 

$("input:checkbox").click(function() { 

    var bol = $("input:checkbox:checked").length != mvp; 

    if(bol){ 
    alert("You have to choose "+ mvp +" mvp's only"); 
    this.checked = false; 
    $("#button-cart").attr("disabled", true); 
    } 
    else{ 
    $("input:checkbox").not(":checked").attr("disabled",bol); 
    $("#button-cart").attr("disabled", false); 
    } 
}); 

}); 

這裏的小提琴:fiddle

基於我設置的MVP值5的例子中,當頁面加載有默認的5複選框檢查。那麼如果你取消選中1,那麼警報會觸發它說你應該有5個MVP,那麼這個按鈕將被禁用。一旦你再次檢查一個複選框,該按鈕就會出現。但用戶可以選擇2個左側複選框。但如果用戶超過5個選擇,則警報將再次觸發並將其返回到5個複選框。問題在於按鈕將保持禁用狀態。

你能幫我做這樣的邏輯:提前d感謝..

回答

4

試試這個,

var mvp = 5; 
$(document).ready(function() { 
    $("input:checkbox").each(function (index) { 
     this.checked = (index < mvp); 
    }).click(function() { 
     en_dis= $("input:checkbox:checked").length < mvp 
     $('#button-id').prop('disabled', en_dis); 
     // to disable other checkboxes 
     $('input:checkbox:checked').length >= mvp && 
      $("input:checkbox:not(:checked)").prop('disabled',true); 
    }).change(function() { 
     if ($(this).siblings(':checked').length >= mvp) { 
      this.checked = false; 
     } 
    }); 
}); 

Working DemoUpdated Demo

+0

謝謝@Rohan Kumar這正是我想要做的。除非複選框沒有被禁用,當它超過 – user2593560

+0

@ user2593560現在檢查我的答案和**更新演示** –

+0

工作演示很好:D更新演示有錯誤。因爲如果用戶檢查第6個複選框從加載,其中有默認5複選框,第6和第7複選框將被禁用。但如果我將取消選中默認的5個複選框中的1個。第6和第7個複選框應該再次打開以供檢查。 – user2593560

0

寫:

$("input:checkbox").each(function (index) { 
    this.checked = (index < mvp); 
}); 
$("#button-id").attr("disabled", true); 
disable(); 
$("input:checkbox").change(function() { 
    var bol = $("input:checkbox:checked").length != mvp; 
    if (bol) { 
     alert("You have to choose " + mvp + " mvp's only");    
     $("#button-id").attr("disabled", true); 
     enable(); 
    } else { 
     $("input:checkbox").not(":checked").attr("disabled", bol); 
     $("#button-id").attr("disabled", false); 
     disable(); 
    }   
}); 
function enable(){ 
    $("input:checkbox").not(":checked").each(function(){ 
     $(this).removeAttr("disabled"); 
    }); 
} 
function disable(){ 
    $("input:checkbox").not(":checked").each(function(){ 
     $(this).attr("disabled","disabled"); 
    }); 
} 

Updated fiddle here.

1

你不應該設置複選框的選中屬性並禁用該按鈕。

在這裏你去:

$(function() { 
    var $button = $('#button-id'), 
     mvp  = 5; 

    $("input:checkbox").each(function (index) { 
     this.checked = (index < mvp); 
    }).on("click", function() { 
     if ($("input:checkbox:checked").length != mvp) { 
      alert("You have to choose " + mvp + " mvp's only"); 
      $button.prop("disabled", true); 
     } else { 
      $("input:checkbox").not(":checked").prop("disabled", false); 
      $button.prop("disabled", false); 
     } 
    }); 
}); 

工作演示:http://jsfiddle.net/R79cM/

+0

在頁面加載。會有一個默認的5選中複選框嗎?但是當我試圖檢查第6個複選框時,警報將觸發並再次返回5複選框,但該按鈕仍然被禁用。 – user2593560

+0

用戶不應該選擇不超過給定的mvp。程序應限制用戶檢查除5複選框外的其他框。 – user2593560