2012-04-17 60 views
0

真不可思議 - 我的同事給我發了這個劇本 - 我相信,我忽略了一些東西簡單太多的檢查

http://jsfiddle.net/mplungjan/j4m62/

由於某種原因,我無法弄清楚,檢查所有三個複選框無論哪個我

<input class="check-all" name="checkbox[]" id="checkbox1" type="checkbox" value="on"/><label for="checkbox1">Check 1&2</label><br/> 

<input class="check-allfeatured" name="checkbox[]" id="checkbox2" type="checkbox" value="on"/><label for="checkbox2">Check 1&2</label><br/> 

<input class="check-alldel" name="deleteids[]" id="deleteids1" type="checkbox" value="on"/><label for="deleteids1">Check this only</label> 
: - 點擊我預計只有前兩個可以對任前兩個和第三的點擊檢查,要對自己的

HTML檢查

的JavaScript:

$(document).ready(function(){ 
    $('.check-all:checkbox').click(function(event) { 
     var group = 'input:checkbox[name=' + $(this).attr('name') + ']'; 
     console.log(group+':'+event.target.checked); 
     $(group).each(function(){ 
      $(this).attr("checked",event.target.checked); 
     }); 
    }); 

    $('.check-alldel:checkbox').click(function(event) { 
     var group = 'input:checkbox[name=' + $(this).attr('name') + ']'; 
     console.log(group+':'+event.target.checked); 
     $(group).each(function(){ 
      $(this).attr("checked",event.target.checked); 
     }); 
    }); 

    $('.check-allfeatured:checkbox').click(function(event) { 
     var group = 'input:checkbox[name=' + $(this).attr('name') + ']'; 
     console.log(group+':'+event.target.checked); 
     $(group).each(function(){ 
      $(this).attr("checked",event.target.checked); 
     }); 
    }); 
}); 

回答

1

雖然不漂亮,修正版本是在這裏:http://jsfiddle.net/j4m62/8/

你的問題是,你是不是把你的周圍複選框的名字聲明的名稱引號。

變化:

var group = 'input:checkbox[name=' + $(this).attr('name') + ']'; 

到:

var group = 'input:checkbox[name="' + $(this).attr('name') + '"]'; 

,你會得到你期望的行爲。但是你真的有很多重複的代碼,所以你可能應該重構,因爲你正在執行相同的操作,而不管點擊了哪個複選框。 Check this out

感謝@limelights指出我忘了明確地通過事件。更新後的鏈接。

+0

不幸的是,你的小提琴是不正確的,你忘記了包括事件。修正版http://jsfiddle.net/j4m62/11/ – 2012-04-17 13:02:42

+0

謝謝@limelights!我已經更新了你的加入鏈接。很棒的發現。我猜'事件'是浮動的,因爲我沒有看到使用Chrome的錯誤,它'工作'。 – veeTrain 2012-04-17 13:06:48

+0

Drat - 我已經懷疑過,但是雖然nah ... :) - PS不是我的代碼,以btw開頭:| – mplungjan 2012-04-17 13:12:17

1

下面的代碼將檢查所有的複選框,因爲group變量包含input:checkbox[name=checkbox[]],並且將選擇在你的情況下,所有的複選框。

$(group).each(function(){ 
     $(this).attr("checked",event.target.checked); 
    }); 
+0

謝謝! - 接受另一個,因爲它也重新考慮了代碼 – mplungjan 2012-04-17 13:16:37