首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Onblur到处触发

Onblur到处触发
EN

Stack Overflow用户
提问于 2013-11-04 23:49:06
回答 3查看 1.2K关注 0票数 0

更新

似乎输入是锁定的,直到我输入一个格式良好的电子邮件地址,然后,只有这样,元素才能解锁/脱离焦点。这很奇怪,因为如果我不能聚焦任何其他元素,那么当当前元素仍然是焦点时,如何触发unfocus事件。那么,您认为这与服务器端的某件事有关吗?

所以我有一段代码,它有一个由服务器生成的输入html,所以我不能直接在标记中执行onblur=function()。相反,我使用tdtd事件将事件处理程序绑定到输入。

代码语言:javascript
复制
<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文件中,我将事件处理程序绑定如下:

代码语言: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,而且我只是单击屏幕上的随机区域。我是不是误会什么了?是否有比the w3schoolthe developer.mozilla这个奇怪的更好的定义?

编辑

我试图创建一个JSfiddle (w/o服务器)来演示,它工作得很好,所以仔细检查一下,我发现输入元素不是unfocus。在文本区域中单击光标的位置并不重要,现在没有其他元素可以聚焦。

编辑2

按照JSFiddle的要求,但是它在这里工作,但不适用于服务器端的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-05 00:29:28

下面是一个有用的小提琴:http://jsfiddle.net/Mn5E4/1/

代码语言:javascript
复制
$("#emailMe").on("blur", function () {   
    var inputVal = $(this).val();       
    var re = /[A-z0-9]*[\.?[\w+]+[A-z0-9]+@[A-z0-9][\.?[\w+]+\.[A-z][A-z][A-z]/;
    if (!re.test(inputVal)) {
        $("#emailMe").focus();
        $("#emailValidate").css("display", "inline-block");
    } else {
        $("#emailValidate").css("display", "none");
    }
});

您不必费心使用click事件来附加处理程序,因为您知道要绑定到的输入的id。

编辑:请注意,这是您的jsFiddle的分叉。根据问题中的代码,我希望所需输入元素的id为"EmailAddress",在这种情况下,您将$("#emailMe")替换为$("#EmailAddress")。

Edit2:您可以通过这样做来消除任何猜测:

代码语言:javascript
复制
<td id="emailInput" class="label">
   @Html.EditorFor(model => Model.EmailAddress, new { @class = "ignore validateEmail"})                        
</td>
<td id="emailValidate" style="display: none">
   <label>Please enter a valid email address</label> 
</td>
<script type='text/javascript'>
$(".validateEmail").on("blur", function () {   
    var inputVal = $(this).val();       
    var re = /[A-z0-9]*[\.?[\w+]+[A-z0-9]+@[A-z0-9][\.?[\w+]+\.[A-z][A-z][A-z]/;
    if (!re.test(inputVal)) {
        $(".validateEmail").focus();
        $("#emailValidate").css("display", "inline-block");
    } else {
        $("#emailValidate").css("display", "none");
    }
});
</script>

请注意,我将另一个类传递给EditorFor助手,并更改了类属性的命名方式以使用@来转义小写名称" class“。

票数 2
EN

Stack Overflow用户

发布于 2013-11-05 00:17:26

请试试这个:

代码语言:javascript
复制
<td id="emailInput" class="label" onclick="emailValidation(event);">
   @Html.EditorFor(model => Model.EmailAddress, new { Class = "ignore"})                        
</td>

 $("#emailInput").on('focusin', "input", function (e) {

    var inputobj = $(this);

        var inputVal = inputobj.val(); 

    var re = /[A-z0-9]*[\.?[\w+]+[A-z0-9]+@[A-z0-9][\.?[\w+]+\.[A-z][A-z][A-z]/;
    if (!re.test(inputVal)) {
        inputobj.focus();
        $("#emailValidate").css("display", "inline-block");
    } else {
        $("#emailValidate").css("display", "none");
    }


})

说明:未测试

票数 -1
EN

Stack Overflow用户

发布于 2013-11-04 23:53:47

您应该使用$(这个)

代码语言:javascript
复制
var inputVal = $(this).val();
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19779510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档