You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Struts2-jQuery的Autocompleter组件中实现输入文本高亮及点击外部文本选中的功能?

如何在Struts2-jQuery的Autocompleter组件中实现输入文本高亮及点击外部文本选中的功能?

我完全理解你的困扰——之前用Struts2+Dojo的自动完成组件自带的两个实用特性,换成Struts2-jQuery组件后居然没了,不过别担心,咱们可以通过组件配置加一点简单的JS代码搞定这两个需求。

先修正你代码里的小问题

首先你写的<sj:autocompleter>的list属性有语法错误,多套了一层引号,正确的写法应该是:

<sj:autocompleter name="yourLuckyNumber" 
                  list="{'1','12','13','14','21','22','23','24','31','32','33','34','41','42','43','44'}" />

1. 实现输入文本在下拉结果中高亮

Struts2-jQuery的autocompleter其实自带了高亮功能,只是默认没开启,你只需要给组件添加highlight="true"属性就能启用:

<sj:autocompleter name="yourLuckyNumber" 
                  list="{'1','12','13','14','21','22','23','24','31','32','33','34','41','42','43','44'}"
                  highlight="true" />

开启这个属性后,下拉结果里匹配你输入内容的部分会自动被加粗高亮,和你之前用Dojo时的效果一致。


2. 实现点击输入框外部时选中已输入的文本

这个功能Struts2-jQuery没有默认提供,我们可以自己写一段jQuery代码来实现。思路是监听整个文档的点击事件,判断点击的目标是不是autocompleter的输入框或者它的下拉菜单,如果不是,就选中输入框里的文本:

<script type="text/javascript">
$(document).ready(function() {
    // 获取autocompleter对应的输入框元素
    var $input = $('input[name="yourLuckyNumber"]');
    
    $(document).on('click', function(e) {
        var $target = $(e.target);
        // 判断点击的元素是不是输入框本身,或者下拉菜单的一部分
        if (!$target.is($input) && !$target.closest('.ui-autocomplete').length) {
            // 选中输入框内的文本
            $input.select();
        }
    });
});
</script>

完整的示例代码

把这些整合到你的页面里,最终代码大概是这样的:

<body>
<h1>Struts 2 jQuery autocompleter example</h1>

<s:form action="resultAction" namespace="/" method="POST">
    <sj:autocompleter name="yourLuckyNumber" 
                      label="What's your lucky number?"
                      list="{'1','12','13','14','21','22','23','24','31','32','33','34','41','42','43','44'}"
                      highlight="true" />
    <s:submit value="submit" name="submit" />
</s:form>

<script type="text/javascript">
$(document).ready(function() {
    var $input = $('input[name="yourLuckyNumber"]');
    
    $(document).on('click', function(e) {
        var $target = $(e.target);
        if (!$target.is($input) && !$target.closest('.ui-autocomplete').length) {
            $input.select();
        }
    });
});
</script>
</body>

这样配置后,你就能获得和之前Dojo组件一样的两个特性了:输入文本在下拉结果中高亮,点击输入框外部时自动选中文本。

备注:内容来源于stack exchange,提问作者prashanth-g

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:38:03