如何避免这种重复的键盘错误/警告?

时间:2011-04-11 22:31:25

标签: jquery

我在表单输入上有一个keyup函数,每次按下一个键都会执行,我在firebug中收到一条警告:

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'。)

这不起作用。

我也尝试过:

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

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

 });

但那个错误,所以我似乎不明白。它的功能还很好。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

首先进行检查,如下所示:

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

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

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

答案 1 :(得分:1)

警告与您的代码无效有关。

这只是jQuery很傻。有一天jQuery会修复它。

Ignore it.

答案 2 :(得分:0)

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

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

$(document).ready(function(){

  // stuff here

});

答案 3 :(得分: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/