type=radio なカスタムフィールドを定義すると、クエリページでは検索条件をチェックボックスで選択できるようになるのだが、いまの enabler.js ではこんな感じで status 固定値を埋め込んである:
jQuery(document).ready(function() { jQuery('#label_0_status').dblclick(function() { jQuery('input[name="0_status"]').each(function() { checked = $(this).attr("checked") $(this).attr("checked",!checked) }) }) });とりあえずリテラルを変数化する:
070: <th scope="row"><label id="label_${n_field_name}">${fields[field_name].label}</label></th> 104: <input type="checkbox" id="_${n_field_name}_$option" name="${n_field_name}"
jQuery(document).ready(function() { field = '0_status'; jQuery('#label_' + field).dblclick(function() { jQuery('input[name="' + field + '"]').each(function() { checked = $(this).attr("checked") $(this).attr("checked",!checked) }) }) });で、たとえば vote という type=radio なカスタムフィールドを定義すると、こんな感じにすれば動作するはず:
jQuery(document).ready(function() { fields = ['0_status', '0_vote']; for (i in fields) { field = fields[i]; jQuery('#label_' + field).dblclick(function() { jQuery('input[name="' + field + '"]').each(function() { checked = $(this).attr("checked") $(this).attr("checked",!checked) }) }) } });/query?status=!closed&vote=a というURLにアクセスして、やってみると……。あぅ。だめだー。期待どおりには動作しない。status と vote 両方あるとき、statusラベルをダブルクリックすると、vote のチェック状態が反転する。いみわかんない。
ブレークポイントを張ってみると、status 側のダブルクリックハンドラなのに、i=0 であってほしいところ、i=1 になってる。失敗。
ちょっと形をかえて、event から field名を取り出すことにする:
jQuery(document).ready(function() { handler = function(event) { field = this.id.slice(6) jQuery('input[name="' + field + '"]').each(function() { checked = $(this).attr("checked") $(this).attr("checked",!checked) }) } fields = ['0_status', '0_vote']; for (i in fields) { field = fields[i]; jQuery('#label_' + field).dblclick(handler) } });
→ 試すと、期待通り、status をクリックするとステータスのチェックボックス状態が、vote をクリックするとvoteのチェックボックス状態が変化した。OK。
fields = ['0_status', '0_vote'];これをどうにかしたい。こうやってとってやろう:
jQuery(document).ready(function() {
handler = function(event) {
field = this.id.slice(6)
$('input[name="' + field + '"]').each(function() {
checked = jQuery(this).attr("checked")
jQuery(this).attr("checked", !checked)
})
}
checkboxes = jQuery("#filters input[type='checkbox']");
fields = []
for (i in checkboxes) {
fields[checkboxes[i].name] = true;
}
for (field in fields) {
jQuery('#label_' + field).dblclick(handler)
}
});
できた。できた。
次回は、もう一歩すすめて機能を完成させる。