2017-03-28 3 views
5

私はASPウェブフォームとTelerikを使用するのが比較的新しいですが、RadComboBoxに特殊文字(é、ù、à、...)を入力できる方法を探しています。RadComboBoxでのアクセントセンシティブ検索

「RenéSomebody」という名前の私のObjectDataSourceに名前がついています。私は "ルネ"と "ルネ"を検索して彼を見つけることができる必要がありますが、これまでのところ運がありません。

アプリケーションでは、フィルタを使用して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(''); 
}; 

だから今、あなたのようなもので、それを組み合わせることができますthis:

// 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) 
関連する問題