更新
在我输入格式正确的电子邮件地址之前,输入似乎被锁定,然后只有这样元素才能解锁/取消焦点。这很奇怪,因为如果我不能聚焦任何其他元素,那么unfocus
当当前元素仍然是焦点时,事件如何触发。你认为它与服务器端的某些东西有关吗?
所以我有这段代码,它有一个由服务器生成的输入 html,所以我不能直接onblur=function()
在标签中做。相反,我使用 的onclick
事件td
将事件处理程序绑定到输入。
<td id="emailInput" class="label" onclick="emailValidation(event);">
@Html.EditorFor(model => Model.EmailAddress, new { Class = "ignore"})
</td>
<td id="emailValidate" style="display: none">
<label>Please enter a valid email address</label>
</td>
在 Javascript 文件中,我像这样绑定事件处理程序:
function emailValidation(e) {
$(e.target).on("blur", function () {
console.log("what target e is");
console.log(e.target);
var inputVal = $(e.target).val();
var re = /[A-z0-9]*[\.?[\w+]+[A-z0-9]+@[A-z0-9][\.?[\w+]+\.[A-z][A-z][A-z]/;
if (!re.test(inputVal)) {
$(e.target).focus();
$("#emailValidate").css("display", "inline-block");
} else {
$("#emailValidate").css("display", "none");
}
});
}
我检查了开发控制台,e.target 是我想要的输入元素。发生的事情是onblur
事件在被附加后被触发并且输入unfocus
即使输入元素不再是焦点,我只是单击屏幕中的随机区域。我是不是误解了什么?有没有比w3school、developer.mozilla和这个奇怪的定义更好的定义?
编辑
我试图创建一个 JSfiddle(没有服务器的东西)来演示,它工作得很好,所以经过仔细检查,我发现输入元素不是unfocus
. 在文本区域中单击光标的位置无关紧要,现在没有其他元素可以成为焦点。
编辑 2
根据JSFiddle的要求,但它在这里工作,但不适用于服务器端的东西