我对使用ASP webforms和Telerik相对较新,但我正在寻找一种允许我在a中输入特殊字符(é,ù,à,...)的方法RadComboBox.
让我说我的名字ObjectDataSource叫"RenéTomebody".我需要通过搜索"Rene"和"René"来找到他,但到目前为止还没有运气.
在应用程序中,他们设法在RadGrid带有过滤器的情况下执行此操作,但RadComboBox就我所知,同样的解决方案并不起作用.
他们使用的解决方案RadGrid:http://www.telerik.com/forums/accent-insensitive-filtering-filtering-on-a-different-column#YS1QT8P1U0-cRPFNfjvDzA
我无权访问后端组件,但您链接的演示包含前端代码,看起来您可以侵入那里。看起来这个控件可能既是客户端-服务器又是客户端。对于仅客户端的黑客来说,看起来有点复杂,并且涉及非公共 API ( _onInputChange),但对于客户端-服务器情况(这可能是您的情况),RadComboBox 对象客户端的文档提到了requestItems方法,因此黑客攻击它可能在未来是相当安全的:
var hackRadComboBoxFilter = function (combobox, filterProcessingFunction) {\n var oldRequestItems = combobox.requestItems;\n\n combobox.requestItems = function() {\n var args = Array.prototype.slice.call(arguments);\n // requestItems has several arguments but the text seems to be the\n // first one, so let\'s modify it and call the original method\n var origFilter = args[0];\n args[0] = filterProcessingFunction(origFilter);\n oldRequestItems.apply(this, args);\n }\n};\nRun Code Online (Sandbox Code Playgroud)\n\n不幸的是,我不知道在 JS 中处理重音的内置方法,但你也可以在这里破解一些简单的东西:
\n\nvar accents = \'\xc3\x80\xc3\x81\xc3\x82\xc3\x83\xc3\x84\xc3\x85\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4\xc3\xa5\xc3\x92\xc3\x93\xc3\x94\xc3\x95\xc3\x95\xc3\x96\xc3\x98\xc3\xb2\xc3\xb3\xc3\xb4\xc3\xb5\xc3\xb6\xc3\xb8\xc3\x88\xc3\x89\xc3\x8a\xc3\x8b\xc3\xa8\xc3\xa9\xc3\xaa\xc3\xab\xc3\xb0\xc3\x87\xc3\xa7\xc3\x90\xc3\x8c\xc3\x8d\xc3\x8e\xc3\x8f\xc3\xac\xc3\xad\xc3\xae\xc3\xaf\xc3\x99\xc3\x9a\xc3\x9b\xc3\x9c\xc3\xb9\xc3\xba\xc3\xbb\xc3\xbc\xc3\x91\xc3\xb1\xc5\xa0\xc5\xa1\xc5\xb8\xc3\xbf\xc3\xbd\xc5\xbd\xc5\xbe\';\nvar mappedAccents = "AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz";\nvar removeAccents = function (origStr) {\n var components = [];\n var len = origStr.length;\n var afterLastAccent = 0;\n for (var i = 0; i < len; i++) {\n var mapPos = accents.indexOf(origStr[i]);\n if (mapPos != -1) {\n components.push(origStr.substr(afterLastAccent, i - afterLastAccent) + mappedAccents[mapPos]);\n afterLastAccent = i + 1;\n }\n }\n if (afterLastAccent < len)\n components.push(origStr.substr(afterLastAccent, len - afterLastAccent));\n return components.join(\'\');\n};\nRun Code Online (Sandbox Code Playgroud)\n\n所以现在你可以将它组合成这样:
\n\n// In real app you probably want something like this\n// var targetComboBox = $find("<%= RadComboBox1.ClientID %>");\n// but for test let\'s just hack first combobox on the page\nvar targetComboBox = Telerik.Web.UI.RadComboBox.ComboBoxes[0];\nhackRadComboBoxFilter(targetComboBox, removeAccents);\nRun Code Online (Sandbox Code Playgroud)\n\n或者,如果您想修改页面上的所有组合框,您可以使用相同的技巧更改原型:
\n\nhackRadComboBoxFilter(Telerik.Web.UI.RadComboBox.prototype, removeAccents)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |