4

ASP.NETプロジェクト用のコンボボックスが必要なので、Ajax Control Toolkitコンボボックス(http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ComboBox/ComboBox.aspx)を使用することにしました。

ページをリロードしたくないのでポストバックを使用したくありませんが、サーバーに呼び出して新しいリストアイテムを永続化できるように、テキストボックスのテキストがいつ変更されるかを知る必要があります。

onchangeこのコンボボックスが使用する入力ボックスにoronblurイベントをバインドする方法に興味があります。

これは私のasp.netページです:

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

<cc1:ComboBox ID="PlantDropDown" runat="server" OnInit="PlantDropDown_Init" DropDownStyle="DropDown" 
             AutoCompleteMode="SuggestAppend" 
            ItemInsertLocation="OrdinalText" AutoPostBack="false">


                </cc1:ComboBox>

更新:提案を使用しようとしましたが、次のエラーが発生します:

$ find( "PlantDropDown")はnullです
[このエラーを中断します]
$ find('PlantDropDown')。add_propertyChanged(function(sender、e){\ r \ n

私はJavascript側にjQueryを使用していますが、それが役立つ場合に備えて。

最終更新:
crescentfreshの助けを借りて動作するようになり、最後に.aspxファイルにこれが含まれています。

<input type="hidden" id="PlantDropDownID" value="<%= PlantDropDown.ClientID %>" />

そして、これは私のjavascriptファイルにあります。これは、.aspxファイルにjavascriptをプッシュしないためです。

elem = document.getElementById('PlantDropDownID');
$find(elem.value).add_propertyChanged(function(sender, e) {
    if (e.get_propertyName() == 'selectedIndex') {
        var newValue = sender.get_textBoxControl().value;
    }
})
4

2 に答える 2

9

"propertyChanged"イベントにバインドし、"selectedIndex"プロパティへの変更を確認することになっていると思います。

$find('PlantDropDown').add_propertyChanged(function(sender, e) {
    if (e.get_propertyName() == 'selectedIndex') {
        var newValue = sender.get_textBoxControl().value;

        // persist selected value here...
    }
})

クライアントの .NET コントロール IDに関する通常の注意事項があります。

APIは簡単ではありません。それは確かです。.get_value()たとえば、埋め込まれたテキスト ボックス コントロールを経由する代わりに便利な方法はありません。

編集

> $find("PlantDropDown") はヌルです

正しい idを使用していることを確認してください。クライアントの .NET コントロール ID を参照してください。参照を取得するには、次のことを行う必要がある場合があります。

$find('<%= PlantDropDown.ClientID %>')

> JavaScript側はjQueryを使用しています

それは何の関係もありません。

于 2009-09-22T02:48:00.210 に答える
1

以下のような関数でラップしないと、提供された回答が機能しないことがわかりました。理由はわかりませんが、うまくいけば、他の人の苦痛を軽減できます。

<script language="javascript" type="text/javascript">

    Sys.Application.add_load(initializePage);

    function initializePage() {
        $find('PlantDropDown').add_propertyChanged(function(sender, e) {    
        if (e.get_propertyName() == 'selectedIndex') {        
        var newValue = sender.get_textBoxControl().value;        
        // persist selected value here...    
        }})
    }

</script>
于 2009-11-11T08:41:52.573 に答える