`
keimon
  • 浏览: 74844 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

2中跨浏览器placeholder实现

阅读更多

1:  

<style>
        .grey {
            color: #999;
        }
        .blue {
            color: blue;
        }
    </style>
<input id="t1" type="text" placeholder="请输入文字1" value="内容"/>
<input id="t2" type="text" placeholder="请输入文字2"/>
<input class="t2" type="text" placeholder="请输入文字3"/>
<input class="t2" type="text" placeholder="请输入文字4"/>
<script type="text/javascript" src="jquery-1.9.1.js"></script>
<script>
    //目前支持该属性的浏览器:Firefox4.0+、Chrome4.0+、Safari4.0+,Opera 11
    /**
     *
     * @type {{_support: null, className: string, init: Function, create: Function, _setValue: Function, _moveCursor: Function}}
     * 有两种调用方式
     // 1)页面初始化时对所有input做初始化
     PlaceHolder.className = 'blue';  //用于设这placeholder的className值;
     PlaceHolder.init();

     // 2)或者单独设置某个元素
     PlaceHolder.create($('#t1'));
     PlaceHolder.create($('#t2'));
     PlaceHolder.create($('.t2'));
     */
    PlaceHolder = {
        _support: (function () {
            return 'placeholder' in document.createElement('input');
        })(),

        // 提示文字的样式,需要在页面中其他位置定义
        className: 'grey',
        init: function () {
            if (!PlaceHolder._support) {
                var inputs = $('input');
                PlaceHolder.create(inputs);
            }
        },

        create: function (inputs) {
            for (var i = 0, length = inputs.length; i < length; i++) {
                var input = inputs.eq(i);
                if (!PlaceHolder._support) {
                    PlaceHolder._setValue(input);
                    input.on('keydown', function () {
                        $(this).removeClass(PlaceHolder.className);
                        if ($(this).val() === $(this).attr('placeholder')) {
                            $(this).val('');
                            $(this).addClass(PlaceHolder.className);
                        }
                    });

                    input.on('keyup', function () {
                        $(this).removeClass(PlaceHolder.className);
                        if ($(this).val() === '') {
                            PlaceHolder._setValue($(this));
                        }
                    });
                    input.on('focus', function () {
                        if ($(this).val() === $(this).attr('placeholder')) {
                            PlaceHolder._moveCursor($(this));
                        }
                    })
                }
            }
        },

        _setValue: function (input) {
            if ($.trim(input.val()) == '') {
                input.addClass(PlaceHolder.className);
                input.val(input.attr('placeholder'));
                PlaceHolder._moveCursor(input);
            } else {
                input.removeClass(PlaceHolder.className);
            }
        },

        _moveCursor: function (input) {
            if (input.get(0).createTextRange()) {
                var rng = input.get(0).createTextRange();
                rng.move("character", 0);
                rng.select();
            }
        }
    }
    PlaceHolder.className = 'blue';
    PlaceHolder.init();
    /*
     // 页面初始化时对所有input做初始化
     //PlaceHolder.className = 'blue';  //用于设这placeholder的className值;
     //PlaceHolder.init();

     // 或者单独设置某个元素
     PlaceHolder.create($('#t1'));
     PlaceHolder.create($('#t2'));
     PlaceHolder.create($('.t2'));
    */
</script>

 

2:

<form id="form1">
    <h3>在不支持placeholder的浏览器下,通过插入悬浮的span元素方式模拟</h3>

    <p><label for="username1">用户名:</label><input type="text" name="username1" id="username1" placeholder="请输入用户名"
                                                 value="" required></p>

    <p><label for="password1">密 码:</label><input type="password" name="password1" id="password1" placeholder="请输入密码"
                                                 value="" required></p>

    <p><label for="address1">地 址:</label><input type="text" name="address1" id="address1" placeholder="请输入地址" value=""
                                                required></p>

    <p><label for="remarks1">备 注:</label><textarea placeholder="请输入备注" id="remarks1"></textarea></p>
</form>
<script src="jquery-1.9.1.js"></script>
<script>
    var oForm1 = $('#form1');
    var oForm1Inputs = $('#form1 input');
    for (var i = 0; i < oForm1Inputs.length; i++) {
        placeHolder(oForm1Inputs.eq(i));
    }
    var oForm1Textarea = $('textarea');
    placeHolder(oForm1Textarea);
    /**
     * @name placeHolder
     * @class 跨浏览器placeHolder,对于不支持原生placeHolder的浏览器
     * @param {Object} obj 要应用placeHolder的表单元素对象
     */
    function placeHolder(obj) {
        if (!obj.attr('placeholder')) return;
        var supportPlaceholder = 'placeholder' in document.createElement('input');
        if (!supportPlaceholder) {
            var defaultValue = obj.attr('placeholder');
            var oWrapper = $('<div>'+defaultValue+'<div>');
            var oMarginLeft = parseInt(obj.css('marginLeft')) ? parseInt(obj.css('marginLeft')) + 3 + 'px' : 3 + 'px';
            var oMarginTop = parseInt(obj.css('marginTop')) ? obj.css('marginTop') : 1 + 'px';
            var oPaddingLeft = obj.css('paddingLeft');
            var oWidth = obj.outerWidth() - parseInt(obj.css('marginLeft')) + 'px';
            var oHeight = obj.height + 'px';
            var oLineHeight = obj.get(0).tagName.toLowerCase() == 'textarea' ? '' : obj.outerHeight() + 'px';
            oWrapper.css({position:'absolute', color:'#ACA899', display:'inline-block', overflow:'hidden', fontFamily: obj.css('fromFamily'),
                fontSize: obj.css('fontSize'), marginLeft:oMarginLeft, marginTop:oMarginTop, paddingLeft:oPaddingLeft, width:oWidth, height:oHeight, lineHeight:oLineHeight});
            oWrapper.addClass('wrap-placeholder');
            obj.before(oWrapper);
            oWrapper.bind('click', function () {
                obj.focus();
            })

            //绑定input或onpropertychange事件
            /*
             oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有用,
             在内容修改后立即被触发,不像 onchange 事件需要失去焦点才触发。
             */
            if (typeof(obj.get(0).oninput) == 'object') {
                obj.get(0).addEventListener("input", changeHandler, false);
            } else {
                obj.get(0).onpropertychange = changeHandler;
            }
            function changeHandler() {
                if($.trim(obj.val()) != ''){
                    oWrapper.hide();
                }else{
                    oWrapper.show();
                }
            }
        }
    }
</script>

0
0
分享到:
评论

相关推荐

    实现跨浏览器的placeholder,兼容IE7

    为了实现跨浏览器的`placeholder`兼容性,开发者通常需要借助JavaScript库或jQuery插件来模拟这一功能。本篇将探讨如何实现这一目标,同时分析提供的文件内容。 首先,`form4_placehold_value.html`很可能是测试...

    javascript版placeholder解决一些浏览器不支持placeholder属性的问题

    为了解决这个问题,开发者通常会利用JavaScript来实现跨浏览器的`placeholder`兼容性处理。 标题"javascript版placeholder解决一些浏览器不支持placeholder属性的问题"指的就是通过JavaScript来模拟`placeholder`的...

    IE7 浏览器处理 兼容 input placeholder.zip

    jQuery是一个广泛使用的JavaScript库,简化了DOM操作、事件处理、AJAX请求等任务,使得开发者能够更容易地实现跨浏览器的兼容性代码。 为了在IE7中实现`placeholder`兼容,首先需要在`index.html`中引入`jquery-...

    IE8支持的placeholder组件

    因此,在现代项目中,我们更倾向于使用支持`placeholder`的现代浏览器,或者结合polyfill库来实现跨浏览器兼容。然而,对于仍需支持IE8的项目,`jquery-placeholder`无疑是一个可靠的解决方案。

    IE兼容placeholder js

    jQuery是一个流行的JavaScript库,它简化了DOM操作、事件处理和AJAX交互等任务,使得开发者能更容易地实现跨浏览器的兼容性功能。`jquery-placeholder-master`可能是一个包含完整源代码、文档和示例的项目,用于在IE...

    登录表单兼容placeholder的方法

    此外,你还可以使用现有的前端库和插件,如jQuery Placeholder或Modernizr,它们提供了更完善的跨浏览器解决方案,可以自动检测浏览器对`placeholder`的支持情况,并提供相应的polyfill。 总之,为确保登录表单的`...

    使用jQuery快速解决input中placeholder值在ie中无法支持的问题

    为了改善用户体验,可以通过jQuery插件或脚本实现跨浏览器的placeholder兼容。 本文将详细介绍两种利用jQuery库快速解决input中placeholder值在IE浏览器中无法支持的方法。首先,了解在IE中placeholder无法显示的...

    JqueryPlaceHolder

    `jQuery Placeholder`插件是实现跨浏览器`placeholder`属性支持的一个有效工具,尤其对于那些需要兼容旧版IE浏览器的项目来说。通过简单的引入和初始化,我们就能为所有用户带来一致的用户体验,无论他们使用的...

    基于jQuery的让非HTML5浏览器支持placeholder属性的代码

    利用jQuery,开发者可以快速实现跨浏览器的功能实现。 4. 什么是IE6? IE6是微软公司的Internet Explorer浏览器的第六个版本,发布于2001年。由于其设计理念较为落后,加上安全和兼容性问题,它在现代web开发中...

    仿HTML5 placeholder 效果.rar

    HTML5的`placeholder`属性是...虽然现代浏览器大多已经支持,但在处理跨浏览器兼容性问题时,了解如何用JavaScript和CSS来模拟`placeholder`效果是非常有必要的。这个压缩包提供的解决方案可以作为一个很好的学习资源。

    input框中出现提示文字(兼容ie 火狐 谷歌)

    此外,还可以使用一些现成的库,如jQuery Placeholder插件,它们已经处理了这些兼容性问题,只需要引入库并简单配置即可实现跨浏览器的提示文字。 总结来说,要实现`input`框中出现提示文字并兼容IE、火狐和谷歌,...

    网页内容placeholder占位特效.zip

    总结来说,"网页内容placeholder占位特效.zip"中的项目展示了如何通过HTML5的`placeholder`属性,配合jQuery和CSS来实现跨浏览器的占位符特效。这样的效果可以提高用户的交互体验,使网页表单更易用。在实际开发中,...

    可编辑下拉框 支持常用浏览器

    由于无法直接访问这个链接,我将基于常见的实践来解释如何实现一个跨浏览器的可编辑下拉框。 实现这样的功能,开发者通常会使用HTML、CSS和JavaScript(或者使用诸如jQuery、React、Vue等前端框架)。以下是一个...

    placeholder属性支持所有IE浏览器的插件

    总结起来,这个插件解决了H5`placeholder`属性在IE浏览器中的兼容性问题,通过代码封装和闭门技术实现了跨浏览器的支持。对于开发者来说,这是一个极好的学习资源,可以帮助他们提高在实际项目中处理浏览器兼容性...

    jplaceholder.js

    如何实现跨浏览器的placeholder效果呢? 附件是我写的一个jquery插件,可以实现兼容IE7,IE8及以上浏览器的placeholder效果

    文本框 默认值 灰色 方法 网络 浏览器

    为了确保跨浏览器兼容性,可以使用jQuery插件如`jquery.placeholder.js`,或者使用条件注释和polyfill来为不支持`placeholder`属性的浏览器添加兼容性支持。 5. **网络环境的影响**:在网络环境中,加载jQuery库和...

    CSS 针对谷歌浏览器(Chrome) safari的webkit核心浏览器CSS hack.txt )

    总之,WebKit CSS Hack是一种非常实用的技术,它可以帮助开发者解决跨浏览器兼容性问题。通过合理运用上述提到的方法,可以有效地确保网页在基于WebKit内核的浏览器(如Chrome和Safari)中表现出色。需要注意的是,...

    解决IE下不支持placeholder属性

    在实际应用中,开发者通常会使用成熟的JavaScript库,如jQuery,来简化跨浏览器的兼容性问题处理。例如,jQuery插件`jQuery.placeholder`就是专为解决这个问题而设计的。它能自动检测并处理所有需要`placeholder`...

    jQuery实现IE输入框完成placeholder标签功能的方法

    5. 注意不同浏览器对CSS属性获取的差异,以及如何编写跨浏览器兼容的代码。 以上内容详尽解释了如何使用jQuery在IE浏览器中实现输入框的`placeholder`功能,以及在这个过程中涉及到的技术点和注意事项。对于开发...

Global site tag (gtag.js) - Google Analytics