WordPress 搜索框添加文字提示


Written on 五月 10, 2009 – 7:29 下午 | by paopao

搜索框里显示文字提示是目前常见的一种技术了,但是实现的方法有很多种,mg12 介绍一个使用 jQuery 添加文字提示的方法。

这个方法相比于原来直接添加 “input” 元素的值为提示文字的办法,提升了可用性和可访问性,不过也存在两个缺点。一个是 mg12 自己也提到的不方便国际化的问题;另一个则是,如果用户要搜索的关键词和默认的文字提示相同时,则无法进行搜索。当然,你也可以认为第二个问题是我钻牛角尖,也许根本没有人会用默认的文字提示作为搜索关键词。其实我也认为不会出现这种情况,我只是想提出另一种思路来实现搜索框的文字提示,这个办法应该可以解决上面提到的两个问题。

下面是我修改我这个主题的搜索框提示的方法:

首先我需要对搜索框部分的主题文件做一点小小的修改

<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/">
<div><input type="text" value="<?php the_search_query(); ?>" name="s" id="s" title="<?php _e('Type text to search here...'); ?>" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>

以上是我这个主题文件的 searchform.php 文件的内容,我做的修改只是给 “input” 元素添加了一个属性

title=”<?php _e(’Type text to search here…’); ?>”

这样就解决了提示文字的国际化问题,如果在语言文件里有定义就可以直接使用了。

然后就是 jQuery 的部分

jQuery(document).ready(function(){
    // DOM 加载完毕时添加搜索提示
    // 修改搜索框的背景色为透明,以便显示其下方的文字
    $("input#s").css({backgroundColor:"transparent"});

    $("input#s")
        // 将搜索框的上层元素改为相对定位
        .parent().css({position:"relative"})
        // 添加一个绝对定位的 span 至搜索框的下方来显示文字提示
        .append('<span id="searchtip" style="position:absolute; top:2px; left:10px; color:#999; display:none; z-index:-1;">' + $("input#s").attr("title") + '</span>');

    // 如果搜索框内容为空则显示提示
    if($("input#s").val() == "") {
        $("#searchtip").show();
    }

    // 当鼠标聚焦在搜索框
    $("input#s").focus(function(){
        // 如果搜索框内容为空则隐藏提示
        if($(this).val() == "") {
            $("#searchtip").hide();
        }
    }).blur(function(){
        // 如果搜索框内容为空则显示提示
        if($(this).val() == "") {
            $("#searchtip").show();
        }
    });

    // 当搜索表单提交时
    $("#searchform").submit(function(){
        // 如果搜索框内容为空则不提交
        if($("input#s").val() == "") {
            return false;
        }
        return true;
    });

    // 解决 IE 8 透明背景色的问题
    $("#searchtip").click(function(){$("input#s").trigger("focus");});
});

这个方法的原理也很简单,就是在搜索框的后面加入一个绝对定位的 “span” 元素来显示文字提示,文字提示的内容则是通过获取搜索框的 title 值来添加。

以上就完成了搜索框文字提示的添加,下面是我在这个过程中遇到的一个问题。

注意到上面的最后一行代码了吗,是为了解决在 IE 8 下的一个问题的,本来可以不需要这行代码的,就是为了万恶的 IE …

问题是这样的,当一个绝对定位的元素位于一个 “input” 元素的下方时,在 IE 8 下你依旧可以用鼠标访问到这个元素,导致点击搜索框时无法获得焦点,在其他我测试的浏览器中都没有这个问题。所以在 IE 8 下,需要为提示文字的 “span” 元素额外的绑定一个监听事件。而且有点奇怪的是,把 “input” 元素换成 “div” 元素后,IE 8 下的表现又和其他浏览器一致了。

关于这个问题我做了一个简单的演示 Demo 页面,有兴趣的可以去看看,我手头没有 IE 7 和 IE 6 ,不知道这两个浏览器是不是存在同样的问题,另外如果你有解决这个问题的办法,也请多多指教。

Popularity: 8% [?]

Tags: , , , ,

  1. One Response to “WordPress 搜索框添加文字提示”

  2. Gravatar

    By 双人 on 八 25, 2009 | Reply | Quote

    有了文字提示感觉就是不同!

Post a Comment