Jquery 清除多个输入的值?

Jquery 清除多个输入的值?,jquery,variables,focus,blur,Jquery,Variables,Focus,Blur,下面我有一个jQuery脚本,它清除焦点上输入的值,如果输入仍然为空,则将其恢复为模糊。它工作得很好,但问题是: 假设我在同一页上有3个输入字段。我单击第一个值为“Name”的变量,defaultValue变量变为“Name”,字段清除。如果单击out,该值将返回到“Name”。现在,如果我单击第二个字段而不刷新页面,它会很好地清除,但是当我单击外部时,它会得到第一个字段的值,而不是“Initials” 那么,如何让defaultValue变量在每次单击某个字段时进行自我更新呢 var adau

下面我有一个jQuery脚本,它清除焦点上输入的值,如果输入仍然为空,则将其恢复为模糊。它工作得很好,但问题是:

假设我在同一页上有3个输入字段。我单击第一个值为“Name”的变量,defaultValue变量变为“Name”,字段清除。如果单击out,该值将返回到“Name”。现在,如果我单击第二个字段而不刷新页面,它会很好地清除,但是当我单击外部时,它会得到第一个字段的值,而不是“Initials”

那么,如何让defaultValue变量在每次单击某个字段时进行自我更新呢

var adaugaInput = $('form#adauga input:text');

adaugaInput.focus(function() {
    var defaultValue = $(this).val();
    if($(this).attr("value") == defaultValue) $(this).attr("value", "");
    adaugaInput.blur(function() {
        if($(this).attr("value") == "") $(this).attr("value", defaultValue);
    });
});

我通常使用这样的代码:)

代码如下:

$(document).ready(function(){

var clearMePrevious = ”;

// clear input on focus
$(’.clearMeFocus’).focus(function() {
  if($(this).val()==$(this).attr(’title’)) {
    clearMePrevious = $(this).val();
    $(this).val(”);
  }
});

// if field is empty afterward, add text again
$(’.clearMeFocus’).blur(function() {
  if($(this).val()==”) {
    $(this).val(clearMePrevious);
  }
});
});

对代码为何以这种方式工作的解释有点复杂。对于每个输入字段,您正在为所有输入上的“模糊”事件建立(并在每个“焦点”事件上重新建立!)处理程序。这很让人困惑,也很难思考,所以我会总结一下,说“不要那样做。”

请注意,我使用“.val()”获取/设置输入字段的“value”属性。此外,“模糊”处理程序设置在“焦点”处理程序之外。此代码使用jQuery“.data()”机制来保持每个元素的默认值。没有测试,但可能很接近


有了这样的机制,有时可以重新设置输入的样式,使(例如)默认值显示为较浅的字体颜色。要做到这一点,您需要删除一个类并将其添加到输入字段中,并使用CSS影响样式。(输入必须从类开始;或者我想你可以在焦点上应用类。)

我会反过来,先保存defaultValue,然后绑定焦点:

var adaugaInput = $('form#adauga input:text');

adaugaInput.each(function(){
    var defaultValue = $(this).val();
        $(this).focus(function() {

        if($(this).attr("value") == defaultValue) $(this).attr("value", "");
    });
    $(this).blur(function() {
        if($(this).attr("value") == "") $(this).attr("value", defaultValue);
    });
});

标准免责声明适用,以上代码未经测试。(编辑:修复了多个模糊绑定)

每个字段只保留一个变量是他已经遇到的问题。我建议他只使用这个函数。只需在textfield上添加一个clearMeFocus类,它就可以工作,不管有多少个,我明白你的意思了。好吧,我不会那样做,但它可能会工作的好。它肯定比原来的要好。我认为你不应该在每次调用“焦点”处理程序时都重新应用“模糊”处理程序+1这可能是实施工作的正确方式。另外,我刚刚借用了我自己项目中一页的代码。:)谢谢,这很有效。我在焦点内使用模糊的唯一原因是因为defaultValue变量,如果模糊在焦点外,我就不能使用它。对,我非常喜欢“.data()”:-)
var adaugaInput = $('form#adauga input:text');

adaugaInput.each(function(){
    var defaultValue = $(this).val();
        $(this).focus(function() {

        if($(this).attr("value") == defaultValue) $(this).attr("value", "");
    });
    $(this).blur(function() {
        if($(this).attr("value") == "") $(this).attr("value", defaultValue);
    });
});