2017-03-28 78 views
5

我對使用ASP webforms和Telerik相對比較陌生,但我正在尋找一種方法,允許我在RadComboBox中鍵入特殊字符(é,ù,à,...)。在RadComboBox中對口音不敏感搜索

可以說我在ObjectDataSource的名字叫做「RenéSomebody」。我需要通過搜索「Rene」和「René」來找到他,但目前爲止沒有運氣。

在應用程序中,他們設法使用濾鏡在RadGrid上執行此操作,但就我所知,此相同解決方案對RadComboBox不起作用。

他們在RadGrid使用的解決方案:http://www.telerik.com/forums/accent-insensitive-filtering-filtering-on-a-different-column#YS1QT8P1U0-cRPFNfjvDzA

回答

0

我到後端組件無法訪問,但你鏈接的演示包含前端代碼和它看起來像你可以在那裏砍。它看起來像這個控件可能只有客戶端服務器和客戶端。對於客戶端而言,只有黑客看起來很複雜,並且使用非公開API(_onInputChange),但對於客戶端 - 服務器案例(這可能是您的情況),client side of RadComboBox Object上的文檔提到了requestItems方法,因此黑客可能會合理安全地使用它:

var hackRadComboBoxFilter = function (combobox, filterProcessingFunction) { 
    var oldRequestItems = combobox.requestItems; 

    combobox.requestItems = function() { 
     var args = Array.prototype.slice.call(arguments); 
     // requestItems has several arguments but the text seems to be the 
     // first one, so let's modify it and call the original method 
     var origFilter = args[0]; 
     args[0] = filterProcessingFunction(origFilter); 
     oldRequestItems.apply(this, args); 
    } 
}; 

不幸的是,我不知道一個內置的方式來應對JS的口音,但你可以破解簡單的東西在這裏也:

var accents = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž'; 
var mappedAccents = "AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz"; 
var removeAccents = function (origStr) { 
    var components = []; 
    var len = origStr.length; 
    var afterLastAccent = 0; 
    for (var i = 0; i < len; i++) { 
     var mapPos = accents.indexOf(origStr[i]); 
     if (mapPos != -1) { 
      components.push(origStr.substr(afterLastAccent, i - afterLastAccent) + mappedAccents[mapPos]); 
      afterLastAccent = i + 1; 
     } 
    } 
    if (afterLastAccent < len) 
     components.push(origStr.substr(afterLastAccent, len - afterLastAccent)); 
    return components.join(''); 
}; 

所以現在你可以在喜歡的東西結合起來這個:

// In real app you probably want something like this 
// var targetComboBox = $find("<%= RadComboBox1.ClientID %>"); 
// but for test let's just hack first combobox on the page 
var targetComboBox = Telerik.Web.UI.RadComboBox.ComboBoxes[0]; 
hackRadComboBoxFilter(targetComboBox, removeAccents); 

,或者如果你要修改的頁面上的所有組合框,您可以用同樣的伎倆改變原型:

hackRadComboBoxFilter(Telerik.Web.UI.RadComboBox.prototype, removeAccents)