bok*_*kov 62 html javascript forms dom
我认为这将是一个简单的黑客攻击,但我现在已经搜索了几个小时,无法找到合适的搜索词.我希望有一个普通的多选框(<select multiple="multiple">
),除了我不希望用户必须按住控制键进行多项选择.
换句话说,我想要左键单击以切换<option>
光标下的元素而不更改任何其他元素.换句话说,我想要的东西看起来像一个组合列表框,但表现得像一组复选框.
任何人都可以在Javascript中建议一个简单的方法吗?谢谢.
tec*_*bar 103
检查这个小提琴:http://jsfiddle.net/xQqbR/1022/
您基本上需要mousedown
为每个事件覆盖事件<option>
并在selected
那里切换属性.
$('option').mousedown(function(e) {
e.preventDefault();
$(this).prop('selected', !$(this).prop('selected'));
return false;
});
Run Code Online (Sandbox Code Playgroud)
为简单起见,我将'option'作为上面的选择器.您可以对其进行微调以匹配<option>s
特定<select>
元素.例如:$('#mymultiselect option')
Ser*_*gio 18
不得不自己解决这个问题,并注意到错误的行为是一个简单的拦截mousedown
和设置属性将有,所以做了一个覆盖的选择元素,它运作良好.
注意:此代码通过替换DOM中的select元素来修复错误行为.这有点激进,会破坏您可能附加到元素的事件处理程序.
window.onmousedown = function (e) {
var el = e.target;
if (el.tagName.toLowerCase() == 'option' && el.parentNode.hasAttribute('multiple')) {
e.preventDefault();
// toggle selection
if (el.hasAttribute('selected')) el.removeAttribute('selected');
else el.setAttribute('selected', '');
// hack to correct buggy behavior
var select = el.parentNode.cloneNode(true);
el.parentNode.parentNode.replaceChild(select, el.parentNode);
}
}
Run Code Online (Sandbox Code Playgroud)
<h4>From</h4>
<div>
<select name="sites-list" size="7" multiple>
<option value="site-1">SITE</option>
<option value="site-2" selected>SITE</option>
<option value="site-3">SITE</option>
<option value="site-4">SITE</option>
<option value="site-5">SITE</option>
<option value="site-6" selected>SITE</option>
<option value="site-7">SITE</option>
<option value="site-8">SITE</option>
<option value="site-9">SITE</option>
</select>
</div>
Run Code Online (Sandbox Code Playgroud)
死灵术。
所选答案没有 jQuery。
另外,它错过了在单击选项时设置焦点,因为如果您编写 e.preventDefault,您必须自己执行此操作...
忘记执行焦点会影响 CSS 样式,例如 bootstrap 等。
var options = [].slice.call(document.querySelectorAll("option"));
options.forEach(function (element)
{
// console.log("element", element);
element.addEventListener("mousedown",
function (e)
{
e.preventDefault();
element.parentElement.focus();
this.selected = !this.selected;
return false;
}
, false
);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51883 次 |
最近记录: |