私は人々のリストを持つページに取り組んでいます。ユーザーは、1 つまたは複数の行を選択できる必要があります。クリックすると一度に 1 人だけが選択されますが、Ctrl キーと Shift キーを使用すると複数選択できる Windows エクスプローラーと同じようにページを動作させたいと思います。
私は jsFiddle でサンプルを作成しました。私が知る限り、Firefox と IE10 で動作しています。
var first_num;
var second_num;
var low_num;
var high_num;
var i;
var selected;
var multiple_lines_selected = 0;
$('label').click(function(e){
if (e.shiftKey){
multiple_lines_selected = 1;
$('input').prop('checked', false);
first_num = parseInt(selected.replace(' input','').replace('#n',''));
second_num = parseInt($(this).attr('ID').replace('n',''));
low_num = Math.min(first_num,second_num);
high_num = Math.max(first_num,second_num);
i = low_num;
while (i<=high_num) {
$('#n'+i +' input').prop('checked', true);
i++;
}
}
else if (e.ctrlKey){
multiple_lines_selected = 1;
selected = '#'+$(this).attr('ID') +' input';
if (!$(selected).is(':checked')) {$(selected).prop('checked', true);}
else {$(selected).prop('checked', false);}
}
else {
selected = '#'+$(this).attr('ID') +' input';
$('input').not(selected).prop('checked', false);
if (multiple_lines_selected) {
setTimeout(function(event){$(selected).prop('checked', true);});
}
multiple_lines_selected = 0;
}
});
$('label').mousedown(function(e){
window.getSelection().removeAllRanges();
});
HTMLは単なる繰り返しです
<label id="n1" class="row">
<input type="checkbox" />Person 1
</label>
アドバイスや助けに感謝します!
jsFiddle へのリンク: http://jsfiddle.net/mExp4/1/
EDIT 1 : Chrome で奇妙なバグを見つけました。コントロールキーを押しながら行をクリックすると、すべてが期待どおりに動作します。ただし、実際のチェックボックスをクリックしても、何も変わりません。考え?
EDIT 2:Chromeで見つけた「バグ」はFirefoxとIEにも存在しますが、注意を払っていませんでした。それがバグかどうかはわかりませんが、回避する方法はまだわかりません。ラベルをクリックすると、問題なく動作します。コントロールキーを使用しているときにチェックボックスをクリックすると、うまく機能しません。
これは、JavaScript がない場合、コントロールまたはシフトを保持しているときにラベルをクリックしても内部のチェックボックスがアクティブにならないという事実に戻ると思います。これにより、.click の代わりに .change を使用しようとする試みが妨げられました。何かご意見は?