2013-02-08 214 views
0

我正在创建placeholder问题的解决方案,以使其仅在使用jquery的每个浏览器中工作。用jquery替换占位符

它的工作好到现在为止... 这是多远我来

var formId = ["Name", "E-mail", "Subject", "Message"]; 
$.each(formId, function(i) { 
    $("input, textarea").focus(function() { 
     if ($(this).val() === formId[i]) 
      $(this).val(""); 
    }).focusout(function() { 
     if ($(this).val() === "") 
      $(this).val(formId[i]); 
    }); 
}); 

它完美,直到焦点了部分工作。当我把注意力集中在输入字段上时,它会在每个输入字段中用Name重新填充值。已经用不同的解决方案尝试过我的方式,但是这种方式与我已经接近一样..任何人都有任何想法?

回答

1

这似乎不是解决此问题的最佳方法。我之前在博客上看到类似以下的解决方案。您占位符属性添加到输入端,所以他们会在现代浏览器中运行,并且您添加的jQuery与占位符属性输入,像[placeholder]:现在

$('[placeholder]').focus(function() { 
    var input = $(this); 
    if (input.val() == input.attr('placeholder')) { 
    input.val(''); 
    input.removeClass('placeholder'); 
    } 
}).blur(function() { 
    var input = $(this); 
    if (input.val() == '' || input.val() == input.attr('placeholder')) { 
    input.addClass('placeholder'); 
    input.val(input.attr('placeholder')); 
    } 
}).blur(); 

$('[placeholder]').parents('form').submit(function() { 
    $(this).find('[placeholder]').each(function() { 
    var input = $(this); 
    if (input.val() == input.attr('placeholder')) { 
     input.val(''); 
    } 
    }) 
}); 

我找不到博客,这是一个耻辱,因为我相信这段代码完全是从该网站复制而来,并且效果很好,跨浏览器。

如何工作的,以及为什么这是一个更好的办法:

将处理每一个输入和textarea元素上的相反,你可以很容易地过滤究竟哪些应该对他们的处理程序:那些有占位符属性。

A .submit()处理程序将保留默认文本作为值发布。

也许我应该上什么,我觉得讲的问题与您的代码:

您使用的每个函数调用多个重点处理,这是非常相似的。你可能不需要每个功能。你可以使用$('input,textarea')。focus(),因为它会为每个输入添加一个处理程序。然后,你可以检查$.inArray($(this).val(),formId)。 Doc inArray()

+0

这个作品与一些MODS的!有一件事在IE浏览器中不起作用,那就是“重置”按钮,我希望它能够正常工作。否则它完美的作品! – Klingstedt 2013-02-08 17:05:30

+1

为了使它在IE中工作,并像其他浏览器一样使用占位符,支持它,我使用了'if($ .browser.msie){code-above}'希望这可以帮助别人! – Klingstedt 2013-02-08 17:30:06

0

忘记var formId,而不是在你的输入/ textarea的HTML标记添加属性的数据占位符用适当的值,则:

$("input, textarea").on({ 
    focus : function() { 
     var $t=$(this); 
     if ($t.val() ===$t.data("placeholder")) 
     $t.val(""); 
    }, 
    blur : function() { 
     var $t=$(this); 
     if ($t.val() === "") 
     $t.val($t.data("placeholder")); 
    } 
}); 
+0

由于OP使用占位符,我认为这可以通过占位符属性而不是数据默认来完成。 – bozdoz 2013-02-08 16:48:34

+0

这并没有太大的区别!但我应该事实上放置数据占位符; NB:你绑定事件的方式属于过去! – mikakun 2013-02-08 16:50:44

+1

这适用于所有浏览器除了点是...我可以使用占位符。 'default-value'在ie中不起作用。 – Klingstedt 2013-02-08 16:52:41