1

私はいくつかのテレリック radComboboxes を持っており、それぞれに対応する隠しフィールドがあります。コンボには cmb の id プレフィックスがあり、隠しフィールドには hd のプレフィックスがあります。これらを使用して、コンボ ボックスの値が変更されたかどうか、またはコンボ ボックスを初期値にリセットする必要があるかどうかを検出しました。onClientSelectedIndexChanged で起動される次の JavaScript があります...

function cmbSelectedIndexChanged(sender, eventArgs) {

            var selectedItem = eventArgs.get_item();

            var selectedItemText = selectedItem != null ? selectedItem.get_text() : sender.get_text();

            var hd = sender.attr('id').replace("cmb", "hd");

            if (selectedItemText !== $('#' + hd).val()) {

                registerChange();

            }

        }

var hdで始まる行  でエラーが発生します - object does not this property or method -

私は何を間違っていますか...?

4

1 に答える 1

0

コントロールの ClientId を検索する必要があるため、コードは機能しません。それ以外の

var hd = sender.attr('id').replace("cmb", "hd");

次の行に沿って何かを試す必要があります。

var hd = sender.get_id().replace("cmb", "hd").replace(/_/,"$");

上記のコードは、テレリック コンボ ボックスのクライアント ID を、asp 隠しコントロールの要素の「name」属性に変換します。以下のコードは、説明されている問題を解決するはずだと思います (以前にこれを教材として使用していて、他のユーザーにとって有益かもしれないと思っていた余分なコメントをお詫びします)。

function cmbSelectedIndexChanged(sender, eventArgs) {
    // Get Selected Item
    var selectedItem = eventArgs.get_item();
    // Get Selected Text
    var selectedItemText = selectedItem != null ? selectedItem.get_text() : sender.get_text();
    // Convert Telerik element id to Asp Control name
    var hd = sender.get_id().replace("cmb", "hd").replace(/_/g,"$");
    // Compare the asp:HiddenField value to the selected text
    if (selectedItemText !== document.getElementsByName( hd)[0].value) {
        registerChange();
    }
}

これをローカルでデバッグするとき、ページに JQuery を登録していなかったので、更新された関数は JQuery に相当する関数の代わりに .getElementsByName 関数を使用します$('[name="' + hd + '"]')

于 2013-08-22T15:33:57.080 に答える