我有一个问题,我无法弄清楚究竟是什么导致了这种行为。我无法在HTML表单上访问输入字段和textarea
。
不幸的是,JS,HTML和CSS非常庞大,所以我不能在这里发布所有内容。
调试这种奇怪的行为时,有人能告诉我要找什么吗?
更新
如果我将光标移到input
字段上,我可以看到文本光标,但是当我单击它时,该字段无法获得焦点。我可以通过按 Tab 键来访问该字段,如果我右键单击它然后单击该字段我也会得到焦点。
...而且不,他们没有disabled
或readonly
属性; - )
答案 0 :(得分:48)
当我点击它时,该字段无法获得焦点。我可以通过按“tab-key”
来访问该字段
听起来您已取消 mousedown 事件的默认操作。在HTML和JS中搜索 onmousedown 处理程序,并查找读取的行。
return false;
此行可能会阻止您通过点击进行聚焦。
Re:您的评论,我假设您无法编辑添加此处理程序的代码?如果可以,最简单的解决方案是删除return false;
语句。
有没有办法只通过不覆盖事件触发器来添加功能?
这取决于处理程序的附加方式。如果使用传统的注册方法附加,例如 element.onmousedown ,然后你可以为它创建一个包装器:
var oldFunc = element.onmousedown;
element.onmousedown = function (evt) {
oldFunc.call(this, evt || window.event);
}
由于此“包装器”不返回 false ,因此它不会取消元素的默认操作(聚焦)。如果使用高级注册方法附加事件,例如 addEventListener 或 attachEvent ,那么您只能使用函数名称/引用删除事件处理程序并使用包装重新附加它功能与上面类似。如果它是一个添加的匿名函数而你无法获得它的引用,那么唯一的解决方案是附加另一个事件处理程序并使用 element.focus()方法手动聚焦元素。
答案 1 :(得分:29)
我也有这个问题。我在包含输入字段的父DIV上使用了jQuery UI的disableSelection()
方法。在Chrome中,输入字段不受影响,但在Firefox中,输入(以及textareas)并没有集中在点击上。这里奇怪的是,这些输入上的点击事件有效。
解决方案是删除父DIV的disableSelection()
方法。
答案 2 :(得分:24)
我知道这是一个非常古老的线索,但这最近发生在我身上;我花了一段时间才弄明白。
将'input'元素放在一对'label'标记内可能导致同样的问题。
在我的情况下,我打算创建一对'div'标签,但我却意外地创建了一对'label'标签,然后使用DOM插入了一些文本输入字段'input type =“text”..' 。
它在屏幕上正常显示,但是当我点击任何文本字段时,光标不断跳回到第一个“输入”并且确实表现不稳定。
我花了一些时间来弄明白这一点,因为这种行为是微妙的,而且根本不会产生这种错误。
bsnider
答案 3 :(得分:23)
使用onclick="this.select()"
属性作为输入标记。
答案 4 :(得分:12)
前一段时间我一直在努力解决同样的问题。我在模态jquery-ui对话框中使用了jquery.layout插件,但我无法访问其中的任何字段。
这似乎是一个z-index
问题(某些div
超出了我的输入字段,所以我无法点击它们)。您应该检查并尝试更改输入字段的z-index
值。
答案 5 :(得分:7)
当表单中存在不平衡的<label>
标记时,有时会发生这种情况。
答案 6 :(得分:5)
我也有这个问题,在我的情况下,我发现字体的颜色与背景颜色相同,所以看起来没什么事。
答案 7 :(得分:4)
如果您在移动设备上使用带有DOM的画布时遇到此问题,Ashwin G
的答案对我来说非常有用,但我是通过javascript完成的
var element = document.getElementById("myinputfield");
element.onclick = element.select();
之后,一切都完美无瑕。
答案 8 :(得分:4)
如果您不将列放在<div class ='row'>
内,则可能会在引导程序中发生这种情况。列浮动不会被清除,您可以使下一列覆盖前一列,因此点击不会达到您期望的dom元素。
答案 9 :(得分:4)
我已经阅读了上面的所有答案,有些人指导我解决问题,但没有找到问题的解决方案。
问题的根本原因是disableSelection()
。它导致所有问题,但删除它不是一个解决方案,因为(至少在2016年或稍前),在触摸屏设备,你有&#34;有&#34;如果你想用jQuery移动对象,可以使用它。
解决方案是将disableSelection()
留给可排序元素,但也在上面添加一个绑定操作:
$('#your_selector_id form').bind('mousedown.ui-disableSelection selectstart.ui-disableSelection', function(event) {
event.stopImmediatePropagation();
})
jQuery元素中的form
只是为了阻止表单上的传播,因为您可能需要在某些元素上传播。
答案 10 :(得分:2)
由于此代码,我遇到了这个问题:
$("#table tbody tr td:first-child").bind("mousedown", function(e){
e.preventDefault();
$(this).parents('tr').removeClass('draggable');
});
我通过删除
解决了这个问题e.preventDefault();
新代码:
$("#table tbody tr td:first-child").bind("mousedown", function(){
$(this).parents('tr').removeClass('draggable');
});
答案 11 :(得分:2)
我有类似的问题 - 无法弄清楚是什么原因,但我使用以下代码修复它。不知何故,它无法只关注空白输入:
$('input').click(function () {
var val = $(this).val();
if (val == "") {
this.select();
}
});
答案 12 :(得分:2)
我正在使用 JQuery UI 和 Bootstrap ,所以我遇到了这个问题,我认为这是两者之间的冲突,正常情况下是textarea或者输入字段本质上是可编辑的,但我在测试了上述所有答案之后制作了这个解决方案,但没有解决所有主流浏览器的跨浏览器支持,但我解决了它,我喜欢分享我可以使用的解决方案它在输入文本和textarea
(在桌面上测试:IE(所有版本),Chrome,Safari,Windows Edge,Firefox,Windows上的Visual Studio Cordova Ripple Viewer和Visual Studio Cordova Windows 10商店应用) 强>
(在移动设备上测试:Chrome,Firefox,Android互联网浏览器以及Android和Visual Studio Cordova Windows 8 + 8.1 + 10手机应用中的Visual Studio Cordova应用程序)
这是HTML代码:
<textarea contenteditable id="textarea"></textarea>
这是CSS代码:
textarea {
-webkit-user-select: text !important;
-khtml-user-select: text !important;
-moz-user-select: text !important;
-ms-user-select: text !important;
user-select: text !important;
/*to make sure that background color and text color is not the same (from the answers above)*/
background-color:#fff !important;
color:#733E27 !important;
}
这是文档就绪的JQuery代码
$("textarea").click(function() {
setTimeout(function(){
$("textarea").focus();
//add this if you are using JQuery UI (From The Solutions Above)
$("textarea").enableSelection();
var val = $("textarea").val();
if (val.charAt(val.length-1) !== " " && val.length !== 1) {
alert(val.length);
val += " ";
}
$("textarea").val(val);
}, 0);
});
if (navigator.userAgent.indexOf('Safari') !== -1 || navigator.userAgent.indexOf('Chrome') !== -1) {
//alert('Its Safari or chrome');
$("textarea").onfocus(function(e) {
setTimeout(function(){
var end;
if ($("textarea").val === "") {
end = 0;
} else {
end = $("textarea").val.length;
}
if ($("textarea").setSelectionRange) {
var range = document.getElementById('textarea').createTextRange();
if (range) {
setTimeout(range, 0, [end, end]);
} else { // IE style
var aRange = document.getElementById('textarea').createTextRange();
aRange.collapse(true);
aRange.moveEnd('character', end);
aRange.moveStart('character', end);
aRange.select();
}
}
e.preventDefault();
return false;
}, 0);
});
}
您可以在我的网络应用程序www.gahwehsada.com
上对其进行测试答案 13 :(得分:1)
我有这个问题超过6个月,可能是同一个问题。主要症状是您无法移动光标或选择文本输入中的文本,只有箭头键允许您在输入字段中移动。非常讨厌的问题,特别是对于textarea输入字段。我有这个html,通过Javascript填充了100个表单中的1个:
<div class="dialog" id="alert" draggable="true">
<div id="head" class="dialog_head">
<img id='icon' src='images/icon.png' height=20 width=20><img id='icon_name' src='images/icon_name.png' height=15><img id='alert_close_button' class='close_button' src='images/close.png'>
</div>
<div id="type" class="type"></div>
<div class='scroll_div'>
<div id="spinner" class="spinner"></div>
<div id="msg" class="msg"></div>
<div id="form" class="form"></div>
</div>
</div>
显然6个月前我曾试图让弹出窗口拖拽失败,同时打破文本输入。一旦我删除了draggable =&#34; true&#34;它又有效了!
答案 14 :(得分:1)
iPhone6 chrome
我的问题是将输入字段放在<label>
和<p>
<label>
<p>
<input/>
</p>
</label>
我将它们改为
<div>
<div>
<input/>
</div>
</div>
它对我有用。
检查完此答案后,请检查此页面中的其他答案,此问题可能有不同的原因
答案 15 :(得分:1)
我刚刚发现了另一个可能的原因导致此问题,某些输入文本框缺少结束“/”,因此当正确的表单为<input ...>
时,我有<input ... />
。这为我解决了。
答案 16 :(得分:1)
以防万一其他人正在寻找这个答案,我们遇到了类似的问题,并通过更改输入标签的z-index解决了这个问题。显然其他一些div已经扩展得太远而且与输入框重叠。
答案 17 :(得分:1)
当你说
时and nope, they don't have attributes: disabled="disabled" or readonly ;-)
这是通过查看您的html,页面的源代码还是DOM?
如果您使用Chrome或Firefox检查DOM,那么您将能够通过javasript或甚至是重叠的div看到添加到输入字段的任何属性
答案 18 :(得分:0)
问题在于我使用class="modal fade"
,我将其更改为class="modal hide"
。这解决了这个问题。
答案 19 :(得分:0)
我遇到了同样的问题。我最终通过检查元素来判断它,我认为我选择的元素是不同的元素。当我这样做时,我发现有一个隐藏元素的z-index为9999,一旦我修复了我的问题就消失了。
答案 20 :(得分:0)
我遇到了同样的问题。尝试各种解决方案,将头发磨了好几个小时。原来是一个未公开的 a 标签。尝试验证您的HTML代码,解决方案可能是一个未关闭的标签导致问题
答案 21 :(得分:0)
我使用Bootstrap +联系表单7来解决这个问题。 我出于某种原因将标签作为表格的容器,这是在移动设备上无法选择的问题。
<label>
<contact form>...</contact form>
</label>
似乎打破除第一个输入和提交之外的所有输入。
答案 22 :(得分:0)
我遇到了同样的问题,解决方法是删除占位符,然后将表单的设计更改为使用标签代替占位符...
答案 23 :(得分:0)
我遇到这个问题是由于Sent
元素与引导程序ü
与“兄弟” div
元素与class ="row"
重叠,第一个隐藏第二个div
元素的焦点。
我解决了从divs树的该级别之外获取class="col"
元素的问题,因此重新平衡了基于div
和div row
类的引导逻辑层次结构。
答案 24 :(得分:0)
我刚才在React中也遇到了同样的问题。
我在路由器中找到了路由。我们无法执行此操作,因为它会导致关闭移动键盘的问题。
<Route
path = "some-path"
component = {props => <MyComponent />}
/>
请确保在这种情况下改用渲染器
<Route
path = "some-path"
render = {props => <MyComponent />}
/>
希望这对某人有帮助
丹尼尔
答案 25 :(得分:0)
值得补充的是,在输入标签上设置 pointer-events:none
属性也会产生这种不需要的行为。
答案 26 :(得分:0)
对于任何在使用 Electron 时遇到此问题的人,我的问题是在选择输入字段之前使用 alert
。显然,Electron 并不完全支持 alert
和 confirm
,因此可能会弄乱输入字段。如果您仍想使用它们,请参阅此帖子:https://stackoverflow.com/a/38859135/12293837
答案 27 :(得分:-1)
当div最终定位在另一个div中的控件上时,也会发生这种情况;比如使用bootstrap进行布局,并使用“col-lg-4”后跟“col-lg = 8”拼写错误......右边的孤立/错误命名的div覆盖左边,并捕获鼠标事件。通过拼写错误轻松吹响 - 和=在键盘上彼此相邻。因此,需要与检查员一起检查并寻找“惊喜”来揭示这些狂野的div。
是否有一个看不见的窗口覆盖控件和阻止事件,这怎么可能发生?事实证明,fatfingering = for - with bootstrap classnames是一种方式......