2017-03-28 31 views
5

Tôi tương đối mới khi sử dụng biểu mẫu web ASP và Telerik, nhưng tôi đang tìm cách cho phép tôi nhập các ký tự đặc biệt (é, ù, à, ...) trong một số RadComboBox.Tìm kiếm không nhạy cảm trong RadComboBox

Cho phép nói rằng tôi có tên trong số ObjectDataSource được gọi là "René Somebody". Tôi cần để có thể tìm thấy anh ta bằng cách tìm kiếm "Rene" và "René", nhưng cho đến nay không có may mắn.

Trong ứng dụng họ đã quản lý để thực hiện việc này trên RadGrid với bộ lọc, nhưng giải pháp tương tự này không hoạt động cho RadComboBox theo như tôi biết.

Giải pháp họ sử dụng trong RadGrid: http://www.telerik.com/forums/accent-insensitive-filtering-filtering-on-a-different-column#YS1QT8P1U0-cRPFNfjvDzA

Trả lời

0

Tôi không có quyền truy cập vào các thành phần phụ trợ nhưng bản demo bạn liên kết chứa mã frontend và có vẻ như bạn có thể hack trong đó. Có vẻ như điều khiển này chỉ có thể là cả máy khách-máy chủ và phía máy khách. Đối với các hack chỉ phía máy khách, có vẻ phức tạp và invloves API không công khai (_onInputChange) nhưng đối với trường hợp máy chủ-khách (có thể là trường hợp của bạn), tài liệu trên client side of RadComboBox Object đề cập đến phương thức requestItems để hack nó có lẽ là tương lai hợp lý an toàn:

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

Đáng tiếc là tôi không biết một cách built-in để đối phó với các điểm nhấn trong JS nhưng bạn có thể hack một cái gì đó đơn giản ở đây cũng như:

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

vì vậy, bây giờ bạn có thể kết hợp nó trong một cái gì đó như điều này:

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

hoặc nếu bạn muốn thay đổi tất cả các comboboxes trên trang web, bạn có thể thay đổi mẫu bằng cách sử dụng thủ thuật tương tự:

hackRadComboBoxFilter(Telerik.Web.UI.RadComboBox.prototype, removeAccents) 
Các vấn đề liên quan