2013-03-08 127 views
-1

我有一个输入字段,在它的焦点上应该看到一个音符。第二次点击后发生聚焦火灾

<input type="text" name="contact_email" id="contact_email" onfocus="craateUserJsObject.showContactEmailNote();"/> 
<div id="contact_email_note" class="info_box">Contact email note</div> 

jQuery代码是:

showContactEmailNote : function() { 
        var ContactEmail = jQuery('#contact_email'); 
        if (typeof ContactEmail.focus(function() 
         { 
          { 
           $("#contact_email_note").show("slow"); 
          } 
         } 
        )); 
        if (typeof ContactEmail.focusout(function() 
         { 
          { 
           $("#contact_email_note").hide("slow"); 
          } 
         } 
        )); 

       } 

的问题是,onfocus事件仅在输入字段第二次点击后,装载音符。 onclick事件也是如此。 如何加载该领域的第一焦点?

感谢,杜尚

+2

为什么使用if语句附加事件处理程序? – 2013-03-08 15:20:21

+0

''('#form')。on('focus','#contact_email',handler).on('blur','#contact_email',handler);'稍微容易理解。 – 2013-03-08 15:24:46

回答

1

使用此...

$('#contact_email').on('focus blur', function(){ 
    $("#contact_email_note").toggle("slow"); 
}); 

而且看到这个demo

+0

谢谢你的回答,代码是正确的,但它仍然在第二个焦点后加载。我究竟做错了什么? – 2013-03-08 15:37:06

+0

对于你的代码,只需将属性css'display:none;'添加到'contact_email_note',你注意到在第一次点击时就可以看到,然后css解决它......看例子... – 2013-03-08 15:38:57

1

你应该用更轻松的代码像这样的:

jQuery的

$('#contact_email').focusin(function() { 
    $("#contact_email_note").show("slow"); 
}).focusout(function() { 
    $("#contact_email_note").hide("slow"); 
}); 

看到工作fiddle demo

编辑显示的音符只有一次

var noteHasBeenShown = false; 
$('#contact_email').focusin(function() { 
    if(!noteHasBeenShown) { 
     $("#contact_email_note").show("slow"); 
     noteHasBeenShown = true; 
    } 
}).focusout(function() { 
    $("#contact_email_note").hide("slow"); 
}); 

编辑以显示说明,并没有把它隐藏

$('#contact_email').focusin(function() { 
    $("#contact_email_note").show("slow"); 
}); 
+0

谢谢你的答案,代码是正确的,但它仍然在第二个焦点后加载。 – 2013-03-08 15:38:04

+0

啊,你希望它只扔一次,而不是现在呢?我正在编辑.. – soyuka 2013-03-08 15:44:55

+0

@soyuka在你编辑代码注意只显示在第一次,在第一次后,注意不再显示... – 2013-03-08 15:50:08

1

如果你正在试图发现的类型事件中,你应该使用event对象的type属性,你正在误用typeof运算符,一个简单的事件监听器会诀窍。

$('#contact_email').on('focus blur', function(event){ 
    $("#contact_email_note").toggle(event.type === 'focus'); 
}) 
+0

谢谢你的回答,代码是正确的,但它仍然在第二个焦点后加载。我究竟做错了什么? – 2013-03-08 15:37:46

+0

@Dušan由于您已将代码置于'showContactEmailNote'方法的上下文中,请移除'onfocus'属性并将代码放入文档就绪处理程序中。 – undefined 2013-03-08 15:39:52

+0

它在文档就绪处理程序中工作,但有没有一种方法来显示它在onfocus或onclick事件上创建对象,但第一次加载? – 2013-03-08 15:59:43