2009-10-27 50 views

回答

1

首先,檢查您是否寧願使用新的AjaxToolKit組合框。

如果你不能(例如,如果你使用的是.NET Framework 2.0),你可以操縱自動完成來回答你的要求,但這是一個令人頭疼的問題,而不是真正的控制。

檢查應該在JavaScript內部進行,您添加一個事件來捕獲OnItemSelected。 然後創建一個函數:

 功能OnItemSelected(發件人,E)
  {
  - 驗證這裏
 }

另一種選擇是要求用戶通過選擇從列表值操縱事件:onchange,點擊& onblur。但需要一段時間才能找到恰當的組合。

爲了振奮精神,我會告訴你,這是可能的(我們已經做到了,但由於版權問題,我無法附上我們的代碼)。

+0

對不起,有點改變這個話題,但是可以配置ComboBox從下一個字母被按下時從代碼隱藏加載匹配嗎? – 2009-10-27 10:13:05

+0

我相信這需要一些操作。 http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ComboBox/ComboBox.aspx – Faruz 2009-10-27 10:18:58

1

像這樣的東西可以幫助你

的Javascript

<script type="text/javascript"> 
     var isItemSelected = false; 

     //Handler for AutoCompleter OnClientItemSelected event 
     function onItemSelected() { 
      isItemSelected = true; 
     } 

     //Handler for textbox blur event 
     function checkItemSelected(txtInput) { 
      if (!isItemSelected) { 
       alert("Only choose items from the list"); 
       txtInput.focus(); 
      } 
     } 
</script> 

ASPX

<asp:Button onblur="checkItemSelected(this)" ../> 
<ajax:AutoCompleteExtender OnClientItemSelected="onItemSelected" ../> 
0

使用布爾isItemSelected會失敗,如果一個用戶最初從選擇一個項目的工作之前提交的答案該列表,然後返回並決定鍵入一個值。

爲了防止這種情況,也應該有一個重置isItemSelected爲false當輸入來關注的事件:

ASPX

<asp:TextBox onblur="checkItemSelected(this)" onfocus="resetItemSelected()"../> 

JS

function resetItemSelected() { 
    isItemSelected = false; 
} 

或...

使用在select上觸發的JS事件,並將該值從文本框複製到隱藏字段。然後使用隱藏字段中的值進行處理。

ASPX

<asp:HiddenField runat="server" ID="hf1"/> 
<asp:TextBox runat="server" ID="tb1"></asp:TextBox> 
<ajax:AutoCompleteExtender ID="ace1" runat="server" TargetControlID="tb1" OnClientItemSelected="userSelected" .../> 

JS

function userSelected(sender, e) { 
    var selectedItem = e.get_value(); 
    $get("<%= hf1.ClientID%>").value = selectedItem; 
    return false; 
} 

別急......還有更多!

要增強上述內容,您可以向文本框中添加模糊事件,以驗證文本框值是否與隱藏字段中的值匹配,並在值不匹配時清除文本框。

//remove value if not selected from drop down list 
$('#<%=tb1.ClientID%>').blur(function() { 
    if ($('#<%=hf1.ClientID%>').val() !== $(this).val()) { 
     $(this).val(""); 
     //optionally add a message near the input 
    } 
}); 

這會讓使用者明白輸入未被接受。

相關問題