【问题标题】:IE8 removing placeholder text after validation fail验证失败后 IE8 删除占位符文本
【发布时间】:2014-02-12 10:54:20
【问题描述】:

question 有类似的问题

在我的表单验证失败后,占位符文本在所有浏览器中都很好,但在 IE8 中消失了。最初 IE8 没有显示占位符,所以我使用此修复来填充占位符

$('[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('');   
        }  
    })   
});

我应该首先使用不同的占位符修复/填充?还是有办法解决这个问题?

【问题讨论】:

  • 最好不要在不支持它的浏览器上使用占位符。无论如何,使用占位符不应该意味着您不必使用某种描述性标签来向用户输出相关信息,这不是占位符的目标。考虑可访问性
  • 设计不包括标签,必须使用占位符,今天早上上线
  • 所以我的老板会说它设计得很糟糕......你当然可以不同意:)
  • 我同意 :) 对于情人节来说,这是一项紧急工作,所以没有太多时间进行更好的设计

标签: jquery forms internet-explorer-8 placeholder polyfills


【解决方案1】:
    var placeholders = {};
$('form').validate({
   submitHandler: function(form) {

   $(form).find(':input[placeholder]').each(function() {
      var placeholder = $(this).attr('placeholder'); 
      placeholders[placeholder] = this;
      $(this).removeAttr('placeholder');
   });       

   form.submit();


 },



enter code here

  $.each(placeholders, function(placeholder, element) {
      $(element).attr('placeholder', placeholder);
  });

}

});

【讨论】:

    【解决方案2】:

    在不支持占位符的浏览器中试试这个库占位符。

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

    【讨论】:

      【解决方案3】:

      我通过重新定义验证器的默认必需函数解决了这个问题,在调用验证之前我添加了这个:

          jQuery.validator.addMethod("required", function(value, element, param) {
              // check if dependency is met
              if ( !this.depend(param, element) ) {
                  return "dependency-mismatch";
              }
              if ( element.nodeName.toLowerCase() === "select" ) {
                  // could be an array for select-multiple or a string, both are fine this way
                  var val = $(element).val();
                  return val && val.length > 0;
              }
              if ( this.checkable(element) ) {
                  return this.getLength(value, element) > 0;
              }
              default:
                  var placeholderval = $(element).attr('placeholder');
                //if some placeholder values are actually default values, just use "default" attribute to mark them
                  var defaultvar = ($(element).attr('default') === undefined);
                  return ($.trim(value).length > 0 && ($.trim(value)!=$.trim(placeholderval) || !defaultvar));
          }, jQuery.validator.messages.required);
      

      【讨论】:

        猜你喜欢
        • 2014-06-18
        • 2012-04-02
        • 2012-06-24
        • 2015-02-18
        • 2022-06-17
        • 1970-01-01
        • 1970-01-01
        • 2015-09-30
        • 1970-01-01
        相关资源
        最近更新 更多