我需要禁用网页上除 input[type=text] 元素之外的所有内容的选择。
这个接受的答案 https://stackoverflow.com/a/7109491/13087类似的问题几乎可以解决问题,但它不会禁用包含 input[type=text] 元素的容器的选择。因此,用户仍然可以通过从这些容器之一内启动拖动操作来进行选择。
这是否可能,即是否可以禁用容器元素的选择,同时为子元素(特别是子输入=文本元素)启用它。
@Pointy,“为什么不直接删除第一个 .not() 调用呢?”
取出第一个.not
调用,将给出:
$('body').not('input').disableSelection();
正如链接问题中所指出的,它仍然会禁用页面上的所有内容,包括 input[type=text] 元素。
@David Thomas,“你们有现场演示吗……”
我没有现场演示,但它相当简单。例如,带有一点填充的 div 包含 input[type=text] 元素。结果是:
好吧,系紧你的背带,准备好非常肮脏的黑客.
免责声明:
我认为这不是一个好的做事方式。我只是想解决获得 OP 所需功能的挑战。如果其他人可以让它以更干净的方式工作,请发布它。
玩过之后disableSelection()
函数,似乎如果父元素被禁用,它的所有子元素也将不可选择(如果我错了请纠正我)。所以我决定如果你愿意的话一切为了除了小部分之外是不可选择的,您可以将所有标记放入一个不可选择的标记中<div>
并使用绝对定位来放置您的可选克隆<input>
标签(或任何标签,实际上)位于不可选择的标签之上。这些克隆将驻留在第二个<div>
那没有被禁用。
这是这个想法的一个例子:http://jsfiddle.net/pnCxE/2/ http://jsfiddle.net/pnCxE/2/.
缺点:
- 造型成为一个让人头疼的问题。任何依赖于父级样式(即位置、大小、颜色等)的元素都无法克隆,因为克隆驻留在单独的位置。
- 表单变得更难管理,因为(再次)克隆与克隆元素不在同一位置。
- 您必须处理命名冲突,因为克隆将与克隆元素具有相同的 ID。 (这是可行的;我只是不想编写它,因为它可能需要使用这个想法的任何人的特别注意)
所以,当你can解决可选择的限制,您最好只接受容器选择。在将这段代码放入生产环境之前,我会认真思考。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)