2017-03-28 30 views
5

Jestem stosunkowo nowy w użyciu formularzy internetowych i Telerik, ale szukam sposobu, który pozwala mi wpisywać znaki specjalne (é, ù, à, ...) w RadComboBox.Wyszukiwanie niewrażliwe na akcent w RadComboBox

Powiedzmy, że mam nazwisko w moim ObjectDataSource o nazwie "Ktoś René". Muszę go znaleźć, szukając "Rene" i "René", ale jak dotąd nie ma szczęścia.

W aplikacji udało się to zrobić na RadGrid z filtrami, ale to samo rozwiązanie nie działa dla RadComboBox o ile wiem.

Rozwiązanie one używane w RadGrid: http://www.telerik.com/forums/accent-insensitive-filtering-filtering-on-a-different-column#YS1QT8P1U0-cRPFNfjvDzA

Odpowiedz

0

nie mam dostępu do elementów zaplecza ale demo zostało połączone zawiera kod frontend i wygląda jak można włamać się tam. Wygląda na to, że ta kontrola może być zarówno klientem, jak i klientem. W przypadku hakerów po stronie klienta wygląda na to, że są skomplikowane i nieprofesjonalne API (_onInputChange), ale w przypadku klienta-serwera (co prawdopodobnie jest w twoim przypadku), dokument o numerze client side of RadComboBox Object wymienia metodę requestItems, więc włamanie do niej jest prawdopodobnie w przyszłości bezpieczne:

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); 
    } 
}; 

Niestety nie wiem, wbudowany w sposób radzenia sobie z akcentami w JS ale można siekać coś prostego również tutaj:

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(''); 
}; 

Więc teraz można połączyć je w coś to:

// 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); 

lub jeśli chcesz zmodyfikować wszystkie comboboxes na stronie, można zmienić prototyp przy użyciu tego samego triku:

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