checkboxを一括チェック、チェック外すのtoggle

何が原因かは分からないがcheck状態を反転させるボタンを作ってjQueryでcheckedを操作するだけではうまくtoggleできない。
とても遅そうなセレクタを使うと機能した。
一応attrの変更も残している。僕の知識では原因がわからない、という。

<!-html5環境です。-->
<label><input class="chk_output" type="checkbox" name="outputs[]" value="1"> 1</label>
<label><input class="chk_output" type="checkbox" name="outputs[]" value="2"> 2</label>
<label><input class="chk_output" type="checkbox" name="outputs[]" value="3"> 3</label>
<label><input class="chk_output" type="checkbox" name="outputs[]" value="4"> 4</label>
<label><input class="chk_output" type="checkbox" name="outputs[]" value="5"> 5</label>
<label><input class="chk_output" type="checkbox" name="outputs[]" value="6"> 6</label>
<label><input class="chk_output" type="checkbox" name="outputs[]" value="7"> 7</label>
<label><input class="chk_output" type="checkbox" name="outputs[]" value="8"> 8</label>
<label><input class="chk_output" type="checkbox" name="outputs[]" value="9"> 9</label>
<input id="btn_selectalloutput" type="button" value="全て選択">
    // 全て選択ボタンでチェックボックスをトグルする。
    $("#btn_selectalloutput").click(function(){
        var val = $(this).attr("value");
        if(val == "全て選択"){
            $(".chk_output:not(:checked)").trigger('click');
            $(".chk_output").attr("checked","checked");
            $(this).attr("value","選択解除");
        }else {
            $(".chk_output:checked").trigger('click');
            $(".chk_output").removeAttr('checked');
            $(this).attr("value","全て選択");
        }
    });

うごいたけど納得行かない。なんでなんだろ?なんでなんだろ?
わからない。。。