【问题标题】:Select all the checkboxes above the current checkbox if selected with shift key pressed如果在按下 shift 键的情况下选中,则选中当前复选框上方的所有复选框
【发布时间】:2013-10-15 11:47:24
【问题描述】:

我在 html 正文中有许多复选框,并且一些复选框具有特定的 css 类。

我只希望每当我选择一个按下 shift 键的复选框时,所有复选框都只在当前复选框之上,并且只在一个复选框之下,该复选框在之前的某个事件中已选中(选中),相应的 css 类已选中(选中)在 DOM 中,应该自动检查(选择)。

其余所有复选框应保持不变。

这是我想要做的:

html

<input type="checkbox" class="select-row"/>
<input type="checkbox" class="select-row"/>
<input type="checkbox" />
<input type="checkbox" class="select-row"/>
<input type="checkbox" class="select-row"/>
<input type="checkbox" />
<input type="checkbox" class="select-row"/>
<input type="checkbox" class="select-row"/>
<input type="checkbox" />
<input type="checkbox" class="select-row"/>

js:

$('.select-row').click(function(e){
if ( e && e.originalEvent.type === "click" && e.originalEvent.shiftKey === true) {
    //what to write?
  }
});

这里是 jsfiddle http://jsfiddle.net/839pS/8/

我该怎么做?

【问题讨论】:

  • 您可以在 shift click 复选框中添加一个类。然后抓住所有复选框并循环检查它们,直到找到带有添加类的复选框,然后打破循环

标签: javascript jquery html css checkbox


【解决方案1】:

使用.prevUntil() 函数选中前面的复选框,然后对它们做任何你需要做的事情(比如将它们的checked 属性设置为true):

var $previousCheckboxes = $(this).prevUntil(':checked', 'input[type="checkbox"]');
$previousCheckboxes.prop('checked', true);

Updated jsFiddle

我并不完全确定确切的停止条件,因此出于示例的目的,我只是选择了“它到达的第一个选中的复选框”。在 cmets 中就该问题进行讨论后,this jsFiddle 正是所需的功能。

【讨论】:

  • 它还包括不对应于“选择行”类的复选框。那是我不想要的。
  • @Koka 我不完全确定您希望它停止的确切条件,所以我只是在它到达的第一个选中的复选框处停止。如果你想改变它停止的条件,只需改变第一个选择器。
  • 感谢您的帮助..这是我正在寻找的更新版本..jsfiddle.net/839pS/17
  • @Koka 如果我对您的理解正确,您想完全忽略没有select-row 类的复选框吗?像这样的东西:jsfiddle.net/839pS/18
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
相关资源
最近更新 更多