将组合框中的值与隐藏字段中的值进行比较

时间:2013-06-27 12:06:03

标签: javascript telerik

我有几个telerik radComboboxes,每个都有一个相应的隐藏字段。 组合的id前缀为cmb,隐藏字段的前缀为hd。我使用这些来检测是否有任何组合框的值已更改,或者我是否需要将组合重置为其初始值。我有以下JavaScript onClienSelectedIndexChanged ...

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

开头的行上收到错误 - 对象不是此属性或方法

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

1 个答案:

答案 0 :(得分:0)

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

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

你应该尝试以下方面:

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

上面的代码会将telerik组合框的客户端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 + '"]')