【发布时间】:2022-03-23 03:18:26
【问题描述】:
我已使用“for”属性将标签元素与表单字段相关联。当我在表单字段下方显示验证消息时会出现此问题。
例如,在下面的演示中,表单字段 1 有一个必需的验证 onblur,
- 通过单击标签选择表单域 1
- 现在单击表单字段 2 标签,该标签应将焦点设置到表单字段 2,但未设置焦点并且 点击被忽略.
有什么想法吗?
$(function () {
$('#formfield1').blur(function() {
$('#errorMessage').text('Form field is required').show();
});
var counter = 1;
$('*').on('focus blur', function (e) {
console.log(counter++ + ' ' + e.type + ' ' + this.id);
})
$('*').click(function (e) {
e.stopImmediatePropagation()
console.log(counter++ + ' ' + e.target.id + ' clicked ');
});
});
.hidden { display: none; }
div { margin: 10px; }
label { width: 100px; display: inline-block; }
.as-console-wrapper { max-height: 65px !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div style="height: 300px; overflow: hidden;">
<div>
<label for="formfield1">Form Field 1</label> <input type="text" id="formfield1" />
</div>
<div id="errorMessage" tabindex="1" class="hidden">
</div>
<div>
<label for="formfield2">Form Field 2</label> <input type="text" id="formfield2" />
</div>
</div>
【问题讨论】:
-
第二个对我来说很好。
-
旁注;
$('*')通常应避免使用 -
@Taplar 是的,只是为了弄清楚重点关注的总体情况..
-
我看到了同样的行为,而且它只发生在第一次,在显示 errorMessage 之前。很有趣。
-
问题是焦点设置在鼠标上。当您模糊时,您正在添加内容,并且当您单击时,该内容恰好位于光标下方。这导致“鼠标向上”出现在错误文本上,而不是您开始点击的标签上。
标签: javascript jquery html css