jQuery .not()方法无法正常工作

时间:2010-10-08 22:39:03

标签: javascript jquery

我正在尝试让所有textareas删除焦点上的默认文本,除了类“预填充”。 但问题是“预填充”类的文本仍在被选中和包含。

有关如何解决此问题的建议? 感谢。

jQuery(document).ready(function inputHide(){

    $('textarea, input:text, input:password').not($('.pre-fill')).focus(function() {
            if ($(this).val() === $(this).attr('defaultValue')) {
                $(this).val('');
            }
        }).blur(function() {
            if ($(this).val()==='') {
                $(this).val($(this).attr('defaultValue'))
            }
        });

});

2 个答案:

答案 0 :(得分:5)

您不应该在$方法调用中拥有jQuery变量(.not)。试试这个:

.not('.pre-fill')

在您的代码中:

$('textarea, input:text, input:password').not('.pre-fill').focus(function() {
        if ($(this).val() === $(this).attr('defaultValue')) {
            $(this).val('');
        }
    }).blur(function() {
        if ($(this).val()==='') {
            $(this).val($(this).attr('defaultValue'))
        }
    });

答案 1 :(得分:1)

您还可以使用 :not() selector

请注意this.value$(this).val()更有效,因为它是直接访问DOM元素的属性,而不是通过首先构建一个jQuery对象然后调用一个jQuery对象来访问完全相同的属性。 jQuery方法。

$('textarea, input:text:not(.pre-fill), input:password:not(.pre-fill)')
   .focus(function() {           
        if (this.value === $(this).attr('defaultValue')) {
            this.value = "";
        }
    }).blur(function() {
        if (this.value === '') {
            this.value = $(this).attr('defaultValue');
        }
    });