我有几个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
开头的行上收到错误 - 对象不是此属性或方法我做错了什么......?
答案 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 + '"]')
。