2009-09-28 64 views
0

我有一個位的jQuery的一個小問題:jQuery早期綁定函數可能嗎?

function getQuickResults(terms) 
{ 
    var url = '/Search/PreviewSearch'; 

    $.ajax({ 
     type: "POST", 
     url: url, 
     data: { terms: terms }, 
     dataType: "json", 
     error: function(xhr, status, error) { 
      alert(error); 
     }, 
     success: function(json) { 

      $("#quickSearchResults").empty(); 

      for (var i = 0; i < json.length; i++) { 
       var title = json[i].Title; 

       $("#quickSearchResults").append($("<span class='quickSearchResult' />")) 
             .children(":last") 
             .append(json[i].Title) 
             .append("<br />"); 
      } 

      $("#quickSearchResults").children(":last").css({ 'border-bottom': 'none' }); 

      if (json.length > 0) { 
       $("#quickSearchResults").show(); 
      } 
      else { 
       $("#quickSearchResults").hide(); 
      } 
     } 
    }); 
} 

基本上這是我的一個輸入提示系統AJAX功能。在關鍵時刻,它發送一個ajax請求來搜索並返回一個值的小下拉列表。

我想要做的是當用戶點擊結果中的一個跨度時,它將該跨度複製到文本框中。所以我試過這個:

 $("#quickSearchResults").append($("<span class='quickSearchResult' />")) 
           .children(":last") 
           .append(json[i].Title) 
           .append("<br />") 
           .click(function(evt) { 
            $("#searchBox").val(json[i].Title);  
           }); 

但是這不起作用。我試着將一個變量賦值給json [i] .Title並用它來代替,但它似乎總是返回最後結果的標題。我認爲這可能是一個有約束力的問題,但不知道是否有解決方法。

回答

2

爲什麼重新發明輪子? jQuery的Autocomplete好像它會適合你的目的

如果不是它一定會讓你的洞察力如何做你正在嘗試以任何方式做

+0

哇。這正是我正在尋找的!感謝您指出這一點。 – James

2
for (var i = 0; i < json.length; i++) { 
    (function(i){ 
    var title = json[i].Title; 

    $("#quickSearchResults").append($("<span class='quickSearchResult' />")) 
          .children(":last") 
          .append(json[i].Title) 
          .append("<br />"); 
    })(i); 
} 

您將需要調用一個函數,因此i存儲和綁定到一個函數,而不是依靠最後的價值,我覺得這樣的事情應該攜手共創關閉。讓我知道如果它不。

1

我不是一個jQuery的大師,但會有這樣的工作嗎?

function setSearchBox() 
{ 
    $("#searchBox").val($(this).data("title")) 
} 

,然後在你的Ajax響應...

$("#quickSearchResults").append($("<span class='quickSearchResult' />")) 
         .children(":last") 
         .append(json[i].Title) 
         .append("<br />") 
         .data("title",json[i].Title) 
         .click(setSearchBox);