IE9中的占位符

IT技术 javascript html internet-explorer-9 placeholder
2021-02-04 14:04:41

这似乎是一个众所周知的问题,但我在 Google 上找到的所有解决方案都不适用于我新下载的 IE9。

您最喜欢哪种方式来启用标签Placeholder上的属性inputtextarea

可选:我在这件事上浪费了很多时间,还没有寻找required房产。您对此也有什么建议吗?显然我可以在 PHP 中检查该值,但是这个属性对于帮助用户来说非常方便。

6个回答

HTML5 Placeholder jQuery 插件
- Mathias BynensHTML5 BoilerplatejsPerf 的合作者

https://github.com/mathiasbynens/jquery-placeholder

演示和示例

http://mathiasbynens.be/demo/placeholder

ps
这个插件我用过很多次了,效果很好。当您提交表单时,也不会将占位符文本作为值提交(......我发现其他插件真的很痛苦)。

这确实是一种享受,但是在单页应用程序上使用它很痛苦。您需要为动态添加的字段手动触发它。除此之外,效果很好!
2021-03-13 14:04:41
我们正在使用自定义 CRM。我添加了这段代码,并按预期工作,但他们通过 javascript 提交表单。提交按钮有onclick="_IW.FormsRuntime.submit(this.form);". 无论如何我可以更改此 onclick 事件以首先清除占位符,然后运行 ​​onclick 中存在的此 CRM 代码?
2021-03-22 14:04:41
我将 github js 文件复制到我的 src 代码中。仍然没有使用占位符。
2021-03-24 14:04:41
谢谢,整洁的插件,但是我遇到的一个问题是 ie9 当文本输入处于焦点时占位符消失。这与 HTML5 行为不同
2021-03-26 14:04:41
它适用于一个大的“但是”,当输入为空时,$('input').val() 返回占位符值。因为我正在使用 AJAX 框架,所以占位符被发送到服务器......
2021-03-30 14:04:41

我认为这就是你要找的:jquery-html5-placeholder-fix

此解决方案使用功能检测(通过modernizr)来确定是否支持占位符。如果没有,添加支持(通过 jQuery)。

注意需要具有 HTML 输入功能的 Modernizer 脚本
2021-03-13 14:04:41
很好奇,因为我是 HTML 5 特性之战的新手:是现代化者导致这是一个糟糕的解决方案还是 jquery-html5-placeholder-fix 本身(或两者)?
2021-03-23 14:04:41
更新的链接修复了上述评论中的问题kamikazemusic.com/web-development/...
2021-03-27 14:04:41
您必须小心使用此代码,因为如果您提交表单,占位符值将作为表单值提交。应该在提交之前清除它。
2021-03-30 14:04:41
它有效,但它不是最好的代码。在顶部$(this)应该分配给一个可以在整个代码中使用的变量。调用$每个使用的表达式$(this)是“不要像这样编写 jQuery 101”中的一个禁忌。
2021-03-31 14:04:41

如果你想在不使用 jquery 或 modenizer 的情况下做到这一点,你可以使用下面的代码:

(function(){

     "use strict";

     //shim for String's trim function..
     function trim(string){
         return string.trim ? string.trim() : string.replace(/^\s+|\s+$/g, "");
     }

     //returns whether the given element has the given class name..
     function hasClassName(element, className){ 
         //refactoring of Prototype's function..
         var elClassName = element.className;
         if(!elClassName)
             return false;
         var regex = new RegExp("(^|\\s)" + className + "(\\s|$)");
         return regex.test(element.className);
     }

     function removeClassName(element, className){
         //refactoring of Prototype's function..
         var elClassName = element.className;
         if(!elClassName)
             return;
         element.className = elClassName.replace(
             new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ');
     }

     function addClassName(element, className){
         var elClassName = element.className;
         if(elClassName)
             element.className += " " + className;
         else
             element.className = className;
     }

     //strings to make event attachment x-browser.. 
     var addEvent = document.addEventListener ?
            'addEventListener' : 'attachEvent';
     var eventPrefix = document.addEventListener ? '' : 'on';

     //the class which is added when the placeholder is being used..
     var placeHolderClassName = 'usingPlaceHolder';

     //allows the given textField to use it's placeholder attribute
     //as if it's functionality is supported natively..
     window.placeHolder = function(textField){

         //don't do anything if you get it for free..
         if('placeholder' in document.createElement('input'))
             return;

         //don't do anything if the place holder attribute is not
         //defined or is blank..
         var placeHolder = textField.getAttribute('placeholder');        
         if(!placeHolder)
             return;

         //if it's just the empty string do nothing..
         placeHolder = trim(placeHolder);
         if(placeHolder === '')
             return;

         //called on blur - sets the value to the place holder if it's empty..
         var onBlur = function(){
             if(textField.value !== '') //a space is a valid input..
                 return;
             textField.value = placeHolder;
             addClassName(textField, placeHolderClassName);
         };

         //the blur event..
         textField[addEvent](eventPrefix + 'blur', onBlur, false);

         //the focus event - removes the place holder if required..
         textField[addEvent](eventPrefix + 'focus', function(){
             if(hasClassName(textField, placeHolderClassName)){
                removeClassName(textField, placeHolderClassName);
                textField.value = "";
             }
         }, false);

         //the submit event on the form to which it's associated - if the
         //placeholder is attached set the value to be empty..
         var form = textField.form;
         if(form){
             form[addEvent](eventPrefix + 'submit', function(){
                 if(hasClassName(textField, placeHolderClassName))
                     textField.value = '';
            }, false);
         }

         onBlur(); //call the onBlur to set it initially..
    };

}());

对于您想要使用它的每个文本字段,您都需要运行placeHolder(HTMLInputElement),但我想您可以更改它以适应!此外,这样做,而不仅仅是在加载时意味着您可以使其在页面加载时适用于不在 DOM 中的输入。

请注意,这是通过将 class:usingPlaceHolder应用于输入元素来工作的,因此您可以使用它来设置样式(例如添加规则.usingPlaceHolder { color: #999; font-style: italic; }以使其看起来更好)。

对不起 - 我真的不知道这是否容易做到 - 我猜你想显示实际的文本值,而不是“符号”。我能想到的唯一 hack 是将其切换为文本输入,除非它具有焦点或值,否则将其显示为密码字段。
2021-03-12 14:04:41
@StephenPatten 看看对带有密码字段的占位符的修复我完全按照马克的建议去做:)
2021-04-03 14:04:41

这是一个更好的解决方案。 http://bavotasan.com/2011/html5-placeholder-jquery-fix/ 我已经采用了一点,仅适用于 IE10 下的浏览器

<!DOCTYPE html>
<!--[if lt IE 7]><html class="no-js lt-ie10 lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]><html class="no-js lt-ie10 lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]><html class="no-js lt-ie10 lt-ie9" lang="en"> <![endif]-->
<!--[if IE 9]><html class="no-js lt-ie10" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--><html class="no-js" lang="en"><!--<![endif]-->

    <script>
    // Placeholder fix for IE
      $('.lt-ie10 [placeholder]').focus(function() {
        var i = $(this);
        if(i.val() == i.attr('placeholder')) {
          i.val('').removeClass('placeholder');
          if(i.hasClass('password')) {
            i.removeClass('password');
            this.type='password';
          }     
        }
      }).blur(function() {
        var i = $(this);  
        if(i.val() == '' || i.val() == i.attr('placeholder')) {
          if(this.type=='password') {
            i.addClass('password');
            this.type='text';
          }
          i.addClass('placeholder').val(i.attr('placeholder'));
        }
      }).blur().parents('form').submit(function() {
        //if($(this).validationEngine('validate')) { // If using validationEngine
          $(this).find('[placeholder]').each(function() {
            var i = $(this);
            if(i.val() == i.attr('placeholder'))
              i.val('');
              i.removeClass('placeholder');

          })
        //}
      });
    </script>
    ...
    </html>
不,因为IE浏览器IE8的工作并没有让jQuery来操纵输入类型(在下午1:48在退房比尔评论于2011年12月20日,bavotasan.com/2011/html5-placeholder-jquery-fix
2021-03-25 14:04:41
还假设您正在提交表单。我见过的大多数单页应用程序都不使用表单。只需单击处理程序。
2021-04-05 14:04:41

如果你想输入一个描述,你可以使用它。这适用于 IE 9 和所有其他浏览器。

<input type="text" onclick="if(this.value=='CVC2: '){this.value='';}" onblur="if(this.value==''){this.value='CVC2: ';}" value="CVC2: "/>
使用此解决方案,您还需要在表单提交时检查此值。
2021-03-16 14:04:41
我自己没有测试过,但是如果您使用 Tab 键切换到该字段而不是单击它,则猜测这不会奏效。我在很多网站或类似网站上都看到了这个错误。
2021-03-22 14:04:41
如果您碰巧在输入中写入了占位符 ('CV2:'),那么您输入的内容将被删除。
2021-03-23 14:04:41
我很惊讶这得到了任何投票,即使在 2012/2013 中发布也不应该使用
2021-03-24 14:04:41