1

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

假设我在同一页面上有 3 个输入字段。我单击第一个值为“名称”的变量,defaultValue变量变为“名称”并且该字段被清除。如果我点击退出,该值将返回到“名称”。现在,如果我在不刷新页面的情况下单击第二个字段,它会很好地清除,但是当我单击外部时,它不会获取值“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);
    });
});
4

3 回答 3

4

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

adaugaInput.focus(function() {
  var input = $(this);
  if (!input.data('default')) input.data('default', input.val());
  if (input.val() === input.data('default'))
    input.val('');
});

adaugaInput.blur(function() {
  var input = $(this);
  if (input.val() === '') input.val(input.data('default'));
});

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

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

于 2010-08-24T12:06:12.723 回答
0

我通常使用这个有效的代码:)

http://www.eggchops.com/web-stuff/jquery/jquery-clear-focus-function/

这是代码:

$(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);
  }
});
});
于 2010-08-24T11:59:21.367 回答
-1

我会反过来,先保存 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);
    });
});

标准免责声明适用,上述代码未经测试。(编辑:固定多重模糊绑定)

于 2010-08-24T12:06:15.483 回答