jQuery问题,各位帮帮忙啊!

请输入... 2009-11-23 09:27:06


function selectYcl(obj){

$(document).ready(function(){
var type = 'type';
$('#'+obj.id+'').autocomplete("doYclmc",{
delay:200,
minChars: 0,
max: 15,
autoFill: false,
mustMatch: true,
matchContains: false,
scrollHeight: 220,
cacheLength:15,
extraParams: {},
formatItem: function(data, i, total) {
return data[0];
},
formatMatch: function(data, i, total) {
return data[0];
},
formatResult: function(data) {
return data[0];
}
});


});



}


我前段时间用jQuery做了一个控件,但出现了一个问题,由于TEXT是动态增加的,ID所以不能确定,我就用了上面的方法,功能到是基本可以实现,但是我得点多次才会出现我要的结果,最主要的是点了一次后autocomplete会运行多次,以后增加的会越点越慢,jQuery以前也没用过,只是做东西时看了一下,现在我上网找了好多资料,都没有看到解决的方法,希望各位能帮帮忙,可以给我说下autocomplete原理更好!
...全文
334 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
robyjeffding 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 yangfuen637200 的回复:]
引用 19 楼 myeclipse0123 的回复:
Jquery就是js包装好的方法,你用的越多速度就越慢,是好用,但是要是提高速度要js写

慢的原因主要是autocomplete执行多次,实在不明的原因
[/Quote]
你可以做下延迟,当输入时,延迟个500毫秒再做后台操作,这样可以避免不必要的资源消耗
请输入... 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 myeclipse0123 的回复:]
Jquery就是js包装好的方法,你用的越多速度就越慢,是好用,但是要是提高速度要js写
[/Quote]
慢的原因主要是autocomplete执行多次,实在不明的原因
请输入... 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 bayougeng 的回复:]
很奇怪哦,怎么会执行多次呢。
要不你绑定到别的事件看看,比如,onkeyup?
[/Quote]
刚才试了,还是一样,点第几次SERVLET就调多次(比如我第一次点时正常,SERVLET执行一次,点第2次SERVLET执行2次....)
bayougeng 2009-11-24
  • 打赏
  • 举报
回复
很奇怪哦,怎么会执行多次呢。
要不你绑定到别的事件看看,比如,onkeyup?
请输入... 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 robyjeffding 的回复:]
引用 20 楼 yangfuen637200 的回复:
引用 19 楼 myeclipse0123 的回复:
Jquery就是js包装好的方法,你用的越多速度就越慢,是好用,但是要是提高速度要js写

慢的原因主要是autocomplete执行多次,实在不明的原因

你可以做下延迟,当输入时,延迟个500毫秒再做后台操作,这样可以避免不必要的资源消耗
[/Quote]
延迟也没有用,因为在点几次后,你点一下,他都会执行多次
请输入... 2009-11-23
  • 打赏
  • 举报
回复
各位有没有什么好的组件,推荐一下啊
请输入... 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 closewbq 的回复:]
麻烦你告诉我,你想实现个什么功能。
[/Quote]

1 实现类似GOOGLE功能,双击显全部数据,输入就根据条件自动选出结果
2 在动态增加的TEXT 里实现
closewbq 2009-11-23
  • 打赏
  • 举报
回复
麻烦你告诉我,你想实现个什么功能。
请输入... 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 apollo_ts 的回复:]
很多人都不用那个。都自己写。

$.autocompleter = function(input, options) {};

没研究过特效。

你看:http://jquery.bassistance.de/autocomplete/demo/


[/Quote]
我也在想自己重新写一个,但写了会改很多,并且老板还让我今天搞完,实在没有办法,因为这个类似GOOGLE功能,单击就会全部显示,又要在动态增加的TEXT里实现(autocompleter 到是可以在固定的ID里实现),实在是想不出什么好办法,也找不到有什么好的组件
APOLLO_TS 2009-11-23
  • 打赏
  • 举报
回复
很多人都不用那个。都自己写。

$.autocompleter = function(input, options) {};

没研究过特效。

你看:http://jquery.bassistance.de/autocomplete/demo/

liguominz 2009-11-23
  • 打赏
  • 举报
回复
jQuery,这个我也想学,一直没空,友情帮顶~
myeclipse0123 2009-11-23
  • 打赏
  • 举报
回复
Jquery就是js包装好的方法,你用的越多速度就越慢,是好用,但是要是提高速度要js写
请输入... 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 bayougeng 的回复:]
ip.onclick=new Function("selectYcl(this);");//给动态增加的TEXT增加onclick方法
function selectYcl(obj){

    $(document).ready(function(){ 
          var type = 'type';
          $('#'+obj.id+'').autocomplete("doYclmc",{
              delay:200, 
            minChars: 0,             
            max: 20,               
            autoFill: false,       
            mustMatch: true,         
            matchContains: false,
            scrollHeight: 220,
            extraParams: {},
            formatItem: function(data, i, total) {     
              return data[0];     
            },     
            formatMatch: function(data, i, total) {     
              return data[0];     
            },     
            formatResult: function(data) {
              return data[0]; 
            }     
        }); 
    });
}
$(document).ready方法是绑定当前页面加载时候的运行的方法,相当与onload。
你将obj的onclick绑定到selectYcl,则每次点击的时候实际上时在执行页面ready方法的绑定。
但是,无论怎么绑定,页面不加载,ready中的代码得不到执行。即使页面再次加载,这里的绑定也无效了。那么你在代码中进行autocomplete的绑定会有效果么?
你为什么不把$(document).ready(function(){ 去掉呢。这样看起来才对啊。

[/Quote]
谢谢!我去掉过的,效果还是与以前一样,不知道为什么autocomplete还是会执行多次
bayougeng 2009-11-23
  • 打赏
  • 举报
回复
ip.onclick=new Function("selectYcl(this);");//给动态增加的TEXT增加onclick方法
function selectYcl(obj){

$(document).ready(function(){
var type = 'type';
$('#'+obj.id+'').autocomplete("doYclmc",{
delay:200,
minChars: 0,
max: 20,
autoFill: false,
mustMatch: true,
matchContains: false,
scrollHeight: 220,
extraParams: {},
formatItem: function(data, i, total) {
return data[0];
},
formatMatch: function(data, i, total) {
return data[0];
},
formatResult: function(data) {
return data[0];
}
});
});
}
$(document).ready方法是绑定当前页面加载时候的运行的方法,相当与onload。
你将obj的onclick绑定到selectYcl,则每次点击的时候实际上时在执行页面ready方法的绑定。
但是,无论怎么绑定,页面不加载,ready中的代码得不到执行。即使页面再次加载,这里的绑定也无效了。那么你在代码中进行autocomplete的绑定会有效果么?
你为什么不把$(document).ready(function(){ 去掉呢。这样看起来才对啊。
请输入... 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 bayougeng 的回复:]
你能否把页面完整点的代码发上来看看?
感觉特别奇怪:
$(document).ready(
这样的语句你却写在某个方法体里。
[/Quote]



function add()//增加到TBODY里
{
var tb=document.getElementById("tb");
rows=tb.rows.length;
if(i==0)i=rows-1;
i++;
tb.appendChild(addRow());
}
function addRow()//增加一行
{
var row=document.createElement("tr");

row.appendChild(addCell('txt','',''));
row.appendChild(addCell('checkbox','',''));
row.appendChild(addCell('text','ycl',false));
row.appendChild(addCell('text','cpgg',true));
row.appendChild(addCell('text','dw', true));
row.appendChild(addCell('text','ys',false));
row.appendChild(addCell('text','jcqdw',false));
row.appendChild(addCell('text','hw',false));
row.appendChild(addCell('text','dj',false));
row.appendChild(addCell('text','sl',false));
row.appendChild(addCell('text','jlsl',false));
row.appendChild(addCell('text','je',false));


return row;
}


//增加TEXT
function addText(id,IsRead)
{
var ip=document.createElement("input");
ip.style.width = '120%';
ip.style.height = '18px';
ip.style.border = '0';
ip.style.margin = '-2';
ip.style.padding = '3 3 0 3';
ip.style.fontFamily = 'tahoma';
ip.style.fontSize = '8pt';
ip.setAttribute("type","text");
ip.setAttribute("name",id+"_"+i);
ip.setAttribute("id",id+"_"+i);
ip.setAttribute("readOnly",IsRead);

if(id=='ycl')
{
ip.onclick=new Function("selectYcl(this);");//给动态增加的TEXT增加onclick方法
ip.onkeypress=new Function("CpbmEnter(this,event)");
}
if(id=='hw')
{
ip.onclick=new Function("selectHw(this);");
}
if(id=='ys')
{
ip.onclick=new Function("selectYs(this);");
}

if(id=='dj')
{
ip.onblur=new Function("countJe(this);");
}

if(id=='sl')
{
ip.onblur=new Function("countJe(this);");
}
if(id=='jcqdw')
{
ip.onblur=new Function("selectdw(this);");
}

return ip;
}





function selectYcl(obj){

$(document).ready(function(){
var type = 'type';
$('#'+obj.id+'').autocomplete("doYclmc",{
delay:200,
minChars: 0,
max: 20,
autoFill: false,
mustMatch: true,
matchContains: false,
scrollHeight: 220,
extraParams: {},
formatItem: function(data, i, total) {
return data[0];
},
formatMatch: function(data, i, total) {
return data[0];
},
formatResult: function(data) {
return data[0];
}
});
});



}





代码很多,我取了一部分,我也不想写方法体里,但是ID不确定,我也只能这样
bayougeng 2009-11-23
  • 打赏
  • 举报
回复
你能否把页面完整点的代码发上来看看?
感觉特别奇怪:
$(document).ready(
这样的语句你却写在某个方法体里。
请输入... 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bayougeng 的回复:]
我还是不明白。无论是不是动态增加的text,你应该都能取得这个text的object吧?
取得以后,做一个绑定不行么?
你不知道怎么取得这些text的object么?
[/Quote]
我是取得了text的object,像我上面的代码,我点一次(
$('#'+obj.id+'').autocomplete("doYclmc",{ )
autocomplete里面的东西操作了sevelet(doYclmc)很多次,这样就使得我后面增加TEXT后,点TEXT,他弹出的东西越来越慢,我实在找不出什么原因来
zl3450341 2009-11-23
  • 打赏
  • 举报
回复
不太清楚
帮顶下
bayougeng 2009-11-23
  • 打赏
  • 举报
回复
我还是不明白。无论是不是动态增加的text,你应该都能取得这个text的object吧?
取得以后,做一个绑定不行么?
你不知道怎么取得这些text的object么?
请输入... 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bayougeng 的回复:]
跟ID有什么关系么?
你直接去的所有input type="text",然后遍历,不行么?jQuery里有现成的each方法啊。
[/Quote]
可能你还没有明的我说的意思,功能要求是:
我动态增加一行,行了有Text,每个Text都要做到与GOOGLE一样的功能,这个行是不固定
加载更多回复(4)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧