goldenglory 2010-09-07 00:46
浏览 218
已采纳

关于jquery.autocomplete的问题?

请问jquery.autocomplete 怎样使它的提示框一开始加载页面时候就显示出来,而不是需要通过单击文本框,或者输入字符

问题原因:我通过jquery.autocomplete
/***************************************/
想要通过js 改变传入的json的值 从而改变提示框内显示的内容
但是如果一开始不能显示下拉提示框的话 就会出现多个下拉提示框重叠的现象,请各位高人 帮我解决 非常感谢(附件 是我写的一个demo)



var stockInfoJson1 = [
{ name: "深发展A", code: "000001",spell:"sfza" },
{ name: "万科A", code: "000002",spell:"wka"},
{ name: "ST 国 农", code: "000004",spell:"stgn" },
{ name: "世纪星源", code: "000005",spell:"sjxy" },
{ name: "深振业A", code: "000006" ,spell:"szya"},
{ name: "ST 达 声", code: "000007" ,spell:"stds"},
{ name: "ST宝利来", code: "000008" ,spell:"stbll"},
{ name: "中国宝安", code: "000009" ,spell:"zgba"},
{ name: "S ST华新", code: "000010" ,spell:"ssthx"},
{ name: "山航B", code: "200152" ,spell:"shb"},
{ name: "*ST帝贤B", code: "200160" ,spell:"stdxb"},
{ name: "雷伊B", code: "200168" ,spell:"lyb"},
{ name: "宝石B", code: "200413",spell:"bsb" },
{ name: "小天鹅B", code: "200418" ,spell:"xteb"},
{ name: "粤高速B", code: "200429" ,spell:"agsb"},
{ name: "宁通信B", code: "200468" ,spell:"ltxb"},
{ name: "晨鸣B", code: "200488" ,spell:"cmb"},
{ name: "珠江B", code: "200505" ,spell:"zjb"},
{ name: "闽灿坤B", code: "200512" ,spell:"mskb"},
{ name: "华电国际", code: "600027" ,spell:"hdgj"}
];
var stockInfoJson2 = [
{ name: "深发展A", code: "000001",spell:"sfza" },
{ name: "万科A", code: "000002",spell:"wka"},
{ name: "ST宝利来", code: "000008" ,spell:"stbll"},
{ name: "中国宝安", code: "000009" ,spell:"zgba"},
{ name: "S ST华新", code: "000010" ,spell:"ssthx"},
{ name: "ST 国 农", code: "000004",spell:"stgn" }

];
////////////////////////////////////////////////////////////////////////////////////////////

$("#suggest1").autocomplete(stockInfoJson, {
minChars: 1,
matchCase:false,//不区分大小写
autoFill: false,
max: 10,
formatItem: function(row, i, max,term) {
//$("

").hide();
var v = $("#suggest1").val();

return row.name + " (" + row.code + ")";
if(row.code.indexOf(v) == 0 || row.spell.indexOf(v)==0)
{
return row.name + " (" + row.code + ")";
}
else
return false;
},
formatMatch: function(row, i, max) {
//alert("uu"); alert(max);
return row.name + " (" + row.code+")";
},
formatResult: function(row) {
//alert("jquery");
return row.code;
},
reasultSearch:function(row,v)//本场数据自定义查询语法 注意这是我自己新加的事件
{
//自定义在code或spell中匹配
if(row.data.code.indexOf(v) == 0 || row.data.spell.indexOf(v) == 0)
{
return row;
}
else
return false;

}
});
$("#suggest1").result(function(event, data, formatted) {
    //如选择后给其他控件赋值,触发别的事件等等
    alert("success");
});

/***************************************/
想要通过js 改变传入的json的值 从而改变提示框内显示的内容
但是如果一开始不能显示下拉提示框的话 就会出现多个下拉提示框重叠的现象,请各位高人 帮我解决 非常感谢

  • 写回答

1条回答 默认 最新

  • CaiHuajiang 2010-09-07 14:38
    关注

    1.怎样使它的提示框一开始加载页面时候就显示出来
    这个本身是很简单的,就是通过触发点击事件来进行的。

    2.想要通过js 改变传入的json的值 从而改变提示框内显示的内容
    关于这个,我可能要批一下jquery.complete.js了,其本身的功能只支持一维数组和远程json(至少我用的版本是这样子的),并且访问本地数组数据是会直接缓存到cache中去。
    想要实现对提示内容的控制,就需要对原有控件进行扩展。

    我的思路是扩展一个功能,使得jquery支持function的动态结果,那么只需要将
    [code="js"]$("#ac").autocomplete(arr, {...});[/code]
    改变为
    [code="js"]$("#ac").autocomplete(function(){return ...}, {...});[/code]

    那么只需要在function设置动态返回结果内容,就可以实现提示框内数据的切换。
    贴个示例,主要变动有两个部分
    (一)
    [code="js"] $.fn.extend({
    autocomplete : function(urlOrData, options, initDate) {
    // 判断是否是URL
    var isUrl = typeof urlOrData == "string";
    var isFun = typeof urlOrData == "function";
    options = $.extend({}, $.Autocompleter.defaults, {
    url : isUrl ? urlOrData : null,
    fun : isFun ? urlOrData : null,
    data : isUrl ? null : urlOrData,
    data2 : initDate,
    delay : isUrl
    ? $.Autocompleter.defaults.delay
    : 10,
    max : options && !options.scroll ? 10 : 150
    }, options);
    [/code]
    (二)
    [code="js"] function request(term, success, failure, init) {
    if (!options.matchCase)
    term = term.toLowerCase();
    var data = cache.load(term);
    if (init)
    data = cache2.load(term);
    // recieve the cached data
    if (data && data.length) {
    success(term, data);
    // if an AJAX url has been supplied, try loading the data now
    } else if ((options.fun && typeof options.fun == "function")) {
    var rowArray = new Array();
    var data = options.fun();

                for (var i = 0, ol = data.length; i < ol; i++) {
                    var rawValue = data[i];
                    rawValue = (typeof rawValue == "string")
                            ? [rawValue]
                            : rawValue;
                    var value = options.formatMatch(rawValue, i + 1,
                            data.length);
                    if (value === false)
                        continue;
    
                    var firstChar = value.charAt(0).toLowerCase();
                    var row = {
                        value : value,
                        data : rawValue,
                        result : options.formatResult
                                && options.formatResult(rawValue) || value
                    };
                    rowArray.push(row);
                };
    
                cache.add(term, rowArray);
                success(term, rowArray);
            } else if ((typeof options.url == "string")
                    && (options.url.length > 0)) {
    
                var extraParams = {
                    timestamp : +new Date()
                };
                $.each(options.extraParams, function(key, param) {
                            extraParams[key] = typeof param == "function"
                                    ? param()
                                    : param;
                        });
    
                $.ajax({
                            // try to leverage ajaxQueue plugin to abort
                            // previous requests
                            mode : "abort",
                            // limit abortion to this input
                            port : "autocomplete" + input.name,
                            dataType : options.dataType,
                            url : options.url,
                            data : $.extend({
                                        q : lastWord(term),
                                        limit : options.max
                                    }, extraParams),
                            success : function(data) {
                                var parsed = options.parse
                                        && options.parse(data) || parse(data);
                                cache.add(term, parsed);
                                success(term, parsed);
                            }
                        });
            } else {
                select.emptyList();
                failure(term);
            }
        };[/code]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?