1

我有几个telerik radComboboxes,每个都有一个相应的隐藏字段。组合的 id 前缀为 cmb,其隐藏字段的前缀为 hd。我使用这些来检测是否有任何组合框的值已更改,或者我是否需要将组合重置回其初始值。我有以下在 ClienSelectedIndexChanged 上触发的 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开头的行上

我究竟做错了什么...?

4

1 回答 1

0

您需要搜索控件的 ClientId,因此代码将不起作用。代替

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

您应该尝试以下方式:

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

上面的代码会将telerik组合框的client 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,因此我更新的函数使用 .getElementsByName 函数而不是 JQuery 等效函数,例如$('[name="' + hd + '"]').

于 2013-08-22T15:33:57.080 回答