2016-10-04 69 views
0

我有一個autocompletetextbox它正是我想要搜索的過濾器。但現在我想的是,自動完成文本框不顯示文本框內點擊結果

如果用戶沒有任何類型進入textbox,只是點擊textbox。它應該顯示所有的結果。這是可能的嗎?

以下是我的代碼。

$(document).ready(function() { 
     SearchText(); 
    }); 
    function SearchText() { 
     $("#txt712").autocomplete({ 
      source: function (request, response) { 
       $.ajax({ 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        url: "Frm_Agreement_Master.aspx/GetAutoCompleteData", 
        data: "{'username':'" + extractLast(request.term) + "'}", 
        dataType: "json", 
        success: function (data) { 
         response(data.d); 
        }, 
        error: function (result) { 
         alert("Error"); 
        } 
       }); 
      }, 
      focus: function() { 
       return false; 
      }, 
      select: function (event, ui) { 
       var terms = split(this.value); 
       terms.pop(); 
       terms.push(ui.item.value); 
       terms.push(""); 
       this.value = terms.join(", "); 
       return false; 
      } 
     }); 
     $("#txt712").bind("keydown", function (event) { 
      if (event.keyCode === $.ui.keyCode.TAB && 
       $(this).data("autocomplete").menu.active) { 
       event.preventDefault(); 
      } 
     }) 
     function split(val) { 
      return val.split(/,\s*/); 
     } 
     function extractLast(term) { 
      return split(term).pop(); 
     } 
    } 

另請參閱我從哪裏獲得參考的鏈接。

Reference link

UPDATE

服務器端代碼

[WebMethod] 
public static List<string> GetAutoCompleteData(string username) 
{ 
    List<string> result = new List<string>(); 
    using (OracleConnection ObjPriCon = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConn"].ToString())) 
    { 
     using (OracleCommand cmd = new OracleCommand("select distinct survey_area_7_12 FROM xxcus.xxacl_pn_farming_mst WHERE survey_area_7_12 LIKE '%' || :searchtext || '%'", ObjPriCon)) 
     { 
      ObjPriCon.Open(); 
      cmd.Parameters.AddWithValue(":searchtext", username.ToLower()); 
      OracleDataReader dr = cmd.ExecuteReader(); 
      if (dr.HasRows) 
      { 
       while (dr.Read()) 
       { 
        result.Add(dr["survey_area_7_12"].ToString()); 
       } 
      } 
      return result; 
     } 
    } 
} 
+0

這可以在服務器端完成。我檢查了引用鏈接和'C#執行sql查詢'。通過驗證空的搜索字符串是否修改查詢以獲取所有結果(選擇*,而不是選擇不同),並將所有結果發送到前端並填充 – Mehavel

+0

@Mehavel:好的,你能幫我解決一些代碼嗎?我無法想象究竟要做什麼。 – BNN

+0

@Div:是的,它是有道理的,它會幫助我更多,如果我得到一些代碼想象在這裏 – BNN

回答

1

在服務器代碼檢查,如果搜索字符串爲空或不是,並觸發查詢accorduingly

public static List<string> GetAutoCompleteData(string username) 
    { 
    List<string> result = new List<string>(); 
    using (SqlConnection con = new SqlConnection("Data Source=SureshDasari;Integrated Security=true;Initial Catalog=MySampleDB")) 
    { 

    **//check if user name is not null** 
    if(null != username){ 
    using (SqlCommand cmd = new SqlCommand("select DISTINCT UserName from UserInformation where UserName LIKE '%'[email protected]+'%'", con))} 
    else{ 
     using (SqlCommand cmd = new SqlCommand("select UserName from UserInformation, con))} 
} 
    { 
    con.Open(); 
    cmd.Parameters.AddWithValue("@SearchText", username); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
    result.Add(dr["UserName"].ToString()); 
    } 
+0

我不明白你的代碼。我應該使用它並檢查? – BNN

+0

嗯。當您搜索字符串('用戶名')爲空時,只需將查詢更改爲'從用戶表中選擇用戶名'即可返回所有結果。如果你正在搜索的列是不可空的,那麼''(空)搜索字符串將不會有任何結果 – Mehavel

+0

我想它不會工作,除非在文本框內點擊某個事件。因爲,當我點擊沒有事件與您的代碼火災 – BNN

0

你可以使用「焦點」事件來做到這一點。

.focus(function() { 
    $(this).autocomplete("search"); 
}); 

完整代碼如下。

$("#txt712").autocomplete({ 
     source: function (request, response) { 
      $.ajax({ 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       url: "Frm_Agreement_Master.aspx/GetAutoCompleteData", 
       data: "{'username':'" + extractLast(request.term) + "'}", 
       dataType: "json", 
       success: function (data) { 
        response(data.d); 
       }, 
       error: function (result) { 
        alert("Error"); 
       } 
      }); 
     }, 
     focus: function() { 
      $(this).autocomplete("search"); //New Code 
     }, 
     select: function (event, ui) { 
      var terms = split(this.value); 
      terms.pop(); 
      terms.push(ui.item.value); 
      terms.push(""); 
      this.value = terms.join(", "); 
      return false; 
     } 
    }); 
+0

我試過了,但它不工作.. – BNN