【问题标题】:Display search field placeholder text显示搜索字段占位符文本
【发布时间】:2018-10-14 10:53:40
【问题描述】:

我有一个问题,我认为某些 javascript 使我的搜索字段占位符文本无法显示。我希望这样当我的页面被加载时,用户可以在顶部看到一个搜索图标,旁边写有搜索文本(占位符文本),一旦用户单击输入区域并输入他们的文本,该文本就会消失.我的问题是,当我的页面加载时,只出现搜索图标而没有文本 - 只有在我单击输入字段一次然后再次单击它之后,搜索占位符才在那里。 这是我的html:

<form id="search" role="search" onsubmit="return checkForm()" action="${searchPage}" method="get" name="simpleSearch">
    <fieldset>
        <legend aria-hidden="true" class="visually-hidden">${Resource.msg('simplesearch.searchCatalog', 'search', null)}</legend>
        <button class="mobile-search-btn" for="q" aria-hidden="false" aria-expanded="false" aria-controls="q" tabindex="0" aria-label="show search field button tap twice to open search input field">${Resource.msg('simplesearch.searchlabel', 'search', null)}</button>
        <input tabindex="0" type="text" id="q" name="q" value="" class="searchField"  placeholder="${Resource.msg('simplesearch.searchtext', 'search', null)}" style="font-style:normal;" unbxdattr="sq"/>
        <input tabindex="0" type="submit" name="go" value="${Resource.msg('simplesearch.searchtext', 'search', null)}" unbxdattr="sq_bt"/>
    </fieldset>
</form>

这里是 javascript,我认为这是导致问题的原因。

 //Header Search Handler
    function headerSearchHandler(){
        var $searchInput = $(".header-search input[type=text]"),
            $searchSubmit = $(".header-search input[type=submit]"),
            $mobSearchBtn = $(".mobile-search-btn"),
            $myAccountText = $(".menu-utility-user .account-text"),
            $miniCart = $("#header #mini-cart"),
            $searchForm = $(".header-search form"),
            $headerPromo = $(".header-promo-area");


        $mobSearchBtn.on("click touchend", function(e) {


            $(this).hide();
            $searchInput.show();
            $searchSubmit.show();
            $miniCart.addClass("search-open");
            $searchForm.addClass("search-open");
            setTimeout(function() {
                $searchInput.addClass("active").focus();
            }, 500);
            e.stopPropagation();
        });

        $searchInput.on("click touchend", function(e) {
            e.stopPropagation();
        }).blur(function(e) {
            var $this = $(this);
            if(($this.val() != '') && !$this.hasClass("placeholder")){return;}
            if($this.hasClass("active")){
                $this.removeClass("active");
                $this.hide();
                $searchSubmit.hide();
                //$myAccountText.show();
                $mobSearchBtn.show();
                $miniCart.removeClass("search-open");
                $searchForm.removeClass("search-open");
            }
        });
    }//End Header Search Handler

我一直在处理这个问题,但我不知道发生了什么。我是新手,但谁能明白为什么我的占位符文本在页面加载时没有自动显示?

更新!在经历了更多之后,这似乎是影响占位符的代码,我仍然无法弄清楚:

(function (app, $) {

    function initializeEvents() {
        $('[placeholder]').each(function (){
            var jqThis = $(this),
            placeholder = jqThis.attr("placeholder");

            jqThis.focus(function () {
                if (jqThis.val() == placeholder) {
                    jqThis.removeClass('placeholder').val('');
                    jqThis.attr('placeholder', '');

                }
            }).blur(function () {
                if (jqThis.val() == '' || jqThis.val() == jqThis.attr('placeholder')) {
                    jqThis.addClass('placeholder').val(placeholder);
                    jqThis.attr('placeholder', placeholder);
                }
            });
        });
    }

    app.searchplaceholder = {
        init : function () {

            // This function seems to disable submit buttons in checkout via ie10
            // Is it necessary to cache the placeholder if it's node attribute is supported?

            if($.browser.msie && $.browser.version === '10.0') return;

            initializeEvents();
        }
    };
}(window.app = window.app || {}, jQuery));

【问题讨论】:

  • 您确定它不起作用吗?我在jsfiddle.net/4eok7t34 上试了一下,效果很好
  • 我正在使用我可能应该添加的需求软件。我希望在页面加载时出现“搜索”,但是当我单击该区域时,我希望占位符“搜索”消失。

标签: javascript jquery input placeholder


【解决方案1】:

我个人会使用 CSS 实现此行为

input:focus::-webkit-input-placeholder { color:transparent; }
input:focus:-moz-placeholder { color:transparent; } /* FF 4-18 */
input:focus::-moz-placeholder { color:transparent; } /* FF 19+ */
input:focus:-ms-input-placeholder { color:transparent; } /* IE 10+ */
input:focus::placeholder { color: transparent; } /* Modern Browsers */

但是你也可以使用一些内联的 javascript...

<input 
type="text" 
placeholder="enter your text" 
onfocus="this.placeholder = ''"
onblur="this.placeholder = 'enter your text'" />

或者您可以在代码中处理焦点/模糊事件,以显示/隐藏占位符(就像您当前所做的那样)。

【讨论】:

    猜你喜欢
    • 2020-07-08
    • 1970-01-01
    • 2011-07-29
    • 2011-03-27
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    相关资源
    最近更新 更多