2009-07-02 2 views
0

Noobieを扱う:jQueryのjavascript配列のAjaxのautosuggestフォームを通じて自分の道をmuddling

私が働いて、それのほとんどを得たが、少し物事を打破する必要があるので、私はjQueryのは、物事を参照する方法を理解することができました。 EDIT:これは私の作業コードです、ありがとうございます。 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"); 

    }); 

}); 

};

関数findPos(OBJ){//スクロール時

var curleft = curtop = 0; 

if (obj.offsetParent) { 

は{

 curleft += obj.offsetLeft; 

}一方を行う(OBJ = OBJ起こり得る特に有用な、親オブジェクトの実際の位置を見つけます。 offsetParent);

返品[curleft];

}

}

jQuery.fn.delay =関数(時間、FUNC){//遅延機能

return this.each(function(){ 

    setTimeout(func,time); 

}); 

}を実行します。

関数mvIndex(ステップ){

    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(); 

        } 

       } 

関数減速(){

$(actobj).delay(1000, function(){scriptgo=1;});} 

機能フェーダー(){

$(ajdiv).delay(10000, function(){$(ajdiv).fadeOut()}); 

}

+1

ソースコードをフォーマットしてください!各行の前に4つの空白を追加することで、これを行うことができます。 – Boldewyn

+0

完全なオリジナルコードを投稿してください。これは多くのJavaScriptエラーがあります – rahul

答えて

5

私はあなたのAREを考えますselectioを反復しようとしていますnのループの代わりに、上記$.each()

$(".resultlist").children().each(function(i){ 
    if ($(this).hasClass("selected")){ 
    listindex = i; 
    } 
}); 

コードは、コードがやろうとしているものとほぼ正確に同じ行う必要がありますjQueryのコア機能を使用するため。

+0

'i'の値をインクリメントする必要はありません – rahul

+0

うわー、それは速かった:Dありがとうございました! – user132192

+3

各メソッドが自動的にそのコードを処理するわけではありません。 – RedWolves