2011-04-11 51 views
1

我有一个表单输入,其执行每一个键被按下的时间KEYUP功能,我得到的萤火一个警告,说:如何避免这种重复的键盘错误/警告?

The 'charCode' property of a keyup event should not be used. The value is meaningless. 

我这个翻译为“标签已经隐然你keyup事件什么都不做“

事情是......我只需要这个keyup函数来运行一次。

很简单,功能是一个带有字段提示的标签,例如“输入您的电子邮件”,将鼠标悬停在文本输入上。打字时,标签消失。

问题是,我的代码试图每次推送密钥时都继续隐藏此标签。

我使用的HTML代码:

<label for='inp_email'>enter your email</label> 
<input id="inp_email" name="inp[email]" class="inp" /> 

的jQuery是

$(document).ready(function(){ 

    $('.inp').keyup(function(){ 

     $(this).prev('label').fadeOut('fast'); 

    }); 

}); 

因此,我认为它需要做这样的检查:

$('.inp').keyup(function(){ 

    $(this).prev('label:visible').fadeOut('fast'); 

}); 

(注: ':visible'in the selector。)

这不起作用。

而且我也试过:

$('.inp').keyup(function(){ 

    $(this).prev('label').is(':visible').fadeOut('fast'); 

}); 

但是error'd,所以我似乎不明白。是功能很好呢。

任何想法?

+0

看你的代码:我不知道方括号中的ID是很好的做法,甚至无效。您还没有为输入字段指定类型?你应该尝试追加新的类到你的元素,然后添加/删除这些,当你想隐藏它们。例如给它一个隐藏的类,然后根据这个进行搜索和修改。 – timothyclifford 2011-04-11 22:36:53

+0

谢谢蒂莫西。在我急匆匆的时候,我在上面写错了代码。我已经纠正它 - 再次感谢。 – willdanceforfun 2011-04-11 22:38:58

回答

1

首先做一个检查,如:

 if ($(this).prev('label').is(":visible")) 
    { 
     $(this).prev('label').fadeOut('fast'); 
    } 

如前所述在JQuery API中,“与其他过滤方法不同,.is()不会创建新的jQuery对象。”所以你不能链接它。

这是一个带有工作版本的jsfiddle

+0

谢谢,我刚刚尝试过,仍然得到相同的警告 – willdanceforfun 2011-04-11 22:40:51

+0

感谢您对.is()进行链接说明,这解释了很多。 – willdanceforfun 2011-04-11 22:42:44

+0

@KeenLearner:尽管代码现在可以工作,但你只能得到一次警告吗? – Town 2011-04-11 22:45:46

0

参见:The 'charCode' property of a keyup event should not be used. The value is meaningless

基本上,它看起来像你需要等到DOM准备就绪,与

$(document).ready(function(){ 

    // stuff here 

}); 
+0

我将编辑我的文章,因为我的函数在$(document).ready(function(){}中已经... – willdanceforfun 2011-04-11 22:36:34

+1

在你链接的问题中,警告与该问题的OP的实际问题不相关。真正的解决方案是这样的:[忽略](http://stackoverflow.com/questions/1823951/the-charcode-property-of-a-keyup-event-should-not-be-used-the-value-is-意思/ 1823960#1823960)。也许将来的jQuery版本会修复它。 – 2011-04-11 22:46:54

0

什么是这样的:

<label for="EmailInput" class="show-me">Enter your email</label> 
<input id="EmailInput" class="email-input" type="text" /> 

$(document).ready(function() { 

    $('input[type=text]').keyup(function() { 

     var idValue = $(this).attr('id'); 

     var label = $('label[for="' + idValue + '"]'); 

     if ($(label).hasClass('hidden')) 
     { 
      $(label).removeClass('hidden'); 
     } 
     else 
     { 
      $(label).addClass('hidden'); 
     } 

    }); 
}); 

可以看到它在这里工作:http://jsfiddle.net/timothyclifford/5Y9Ws/2/

+0

干杯蒂莫西。我检查了这个例子,它的工作原理,但JavaScript警告仍然出现在萤火虫控制台。 – willdanceforfun 2011-04-11 23:22:50

+0

我没有收到任何Firebug警告... – timothyclifford 2011-04-11 23:28:22

1

该警告是不相关的代码无法正常工作。

这只是jQuery愚蠢。有一天jQuery会解决它。

Ignore it.

+0

感谢您的支持。我意识到它只是一个警告......我不确定它是否浪费了最终用户的资源。 – willdanceforfun 2011-04-11 22:49:28

+0

@KeenLearner:如果他们打开了Firebug,可能是。 :) – 2011-04-11 22:49:45