jQuery javascript 数组处理
Posted
技术标签:
【中文标题】jQuery javascript 数组处理【英文标题】:jQuery javascript array handling 【发布时间】:2010-11-07 14:16:51 【问题描述】:Noobie 在 Ajax 自动提示表单中糊涂:
我已经完成了大部分工作,但需要稍微分解一下,这样我才能理解 jQuery 是如何引用事物的。 编辑:这是我的工作代码,谢谢大家。 ajaxdiv 延迟的一些问题,不是闲逛,但我正在努力;)
function jQajax(ipfield,ajd,dbtable,company,select,element)
if (!ipfield || !ajd || !dbtable || !company || !select || !element)alert("Parameters not sent to ajax handler correctly; Input to act on, Ajax Div, Database table to check, Company (database name), Field to select, Element Id. "); return false;
actobj="#"+ipfield;// set the active object for jQuery
ajdiv="#"+ajd; //set the ajax responding div
listindex=-1; //clear the notion of which item is selected
scriptgo=1; // slowdown for key javascript
leftpos = findPos($(actobj));
var width = $(actobj).width()-2;
$(ajdiv).css("left",leftpos);
$(ajdiv).css("width",width);
$(actobj).keyup(function(event)
//alert(event.keyCode);
//Key presses you need to know: 40=down 38=up 13=Enter 27=ESC 8=Bkspc 46=DEL
var keyword = $(actobj).val();
if(keyword.length)
if(event.keyCode != 40 && event.keyCode != 38 && event.keyCode != 13)
$.ajax(
type: "GET",
url: "includes/ajax_server.php",
cache: false,
data: "company="+company+"&data="+keyword+"&table="+dbtable+"&select="+select,
success: function(msg)
if(msg != 0)
$(ajdiv).fadeIn("slow").html(msg);
fader();
else
$(ajdiv).fadeOut("slow");
);
else
switch (event.keyCode)
case 40: // down pressed
fader();
step=1;
mvIndex(step);
break;
case 38: //up pressed
fader();
step=-1;
mvIndex(step);
break;
case 13:
$(actobj).val($(".ajitems[class='selected'] a").text());
listindex=-1;
loadSkuDetails(element);
$(ajdiv).fadeOut("slow");
break;
case 27:
listindex=-1;
$(ajdiv).fadeOut("slow");
$(actobj).focus();
else
$(ajdiv).fadeOut("slow");
);
$(ajdiv).mouseover(function()
$(this).find(".ajitems a:first-child").mouseover(function ()
$(this).addClass("selected");
);
$(this).find(".ajitems a:first-child").mouseout(function ()
$(this).removeClass("selected");
);
$(this).find(".ajitems a:first-child").click(function ()
$(actobj).val($(this).text());
loadSkuDetails(element);
$(ajdiv).fadeOut("slow");
);
);
;
function findPos(obj) //找到父对象的真实位置,在可能发生滚动时特别有用
var curleft = curtop = 0;
if (obj.offsetParent)
做
curleft += obj.offsetLeft;
while (obj = obj.offsetParent);
返回 [curleft];
jQuery.fn.delay = function(time,func) //运行一个延迟函数
return this.each(function()
setTimeout(func,time);
);
;
函数 mvIndex(step)
if(scriptgo==1)
kids=$(".resultlist").children();
$(".resultlist").children().each(function(i)
if ($(this).hasClass("selected"))
listindex = i;console.log(listindex);
);
if (listindex==-1 && step==-1)change=i-1;//up = last item
if (listindex==-1 && step==1)change=0;//down = first item
if (listindex > -1)
change=listindex+step; //already selected
if (change > i-1 || change < 0) change=0;
console.log("mv2",listindex,"step",step,"change",change);
if (change >=0)$(".resultlist").children("*").eq(change).addClass("selected");
if (listindex >=0)$(".resultlist").children("*").eq(listindex).removeClass("selected");
scriptgo=0;
slowDown();
函数 slowDown()
$(actobj).delay(1000, function()scriptgo=1;);
函数推子()
$(ajdiv).delay(10000, function()$(ajdiv).fadeOut());
【问题讨论】:
请格式化您的源代码!您可以通过在每行前面添加四个空格来做到这一点。 请发布您的完整原始代码。这个有很多 JavaScript 错误 【参考方案1】:我认为您正在尝试使用 for 循环而不是使用 jQuery Core 函数 $.each() 来迭代选择
$(".resultlist").children().each(function(i)
if ($(this).hasClass("selected"))
listindex = i;
);
上面的代码应该与您的代码尝试做的几乎完全相同。
【讨论】:
是否需要增加'i'的值 哇,真快 :D 谢谢好先生!在我弄清楚我的代码还有什么问题后,我会回来的;) 对我不起作用 :( 编辑以添加完整源代码...有问题的功能在底部。还有pastebin.com/m2d28a15d以上是关于jQuery javascript 数组处理的主要内容,如果未能解决你的问题,请参考以下文章
jquery 与 javascript 有啥关系?jquery 干啥用的?
如何在 Javascript 或 Jquery 中处理具有多个循环的大量数组?
JavaScript之jQuery-6 jQuery 类数组的操作