Soundex довольно примитивен - он был первоначально разработан, чтобы быть вычисленной рукой. Это приводит к ключу, который может быть сравнен.
Soundex работает хорошо с западными именами, поскольку он был первоначально разработан для американских данных переписи. Это предназначается для фонетического сравнения.
расстояние Левенштейна смотрит на два значения и производит значение на основе их подобия. Это ищет пропавших без вести или буквы, которыми заменяют.
В основном Soundex лучше для нахождения, что "Schmidt" и "Smith" могли бы быть той же фамилией.
расстояние Левенштейна лучше для определения, что пользователь ввел "Levnshtein" с опечаткой;-)
Эта статья может вам помочь. Он использует такие приемы:
// executes an onchange function after 750ms (or specified delay)
function safeOnChange1( code, delay ) {
delay = delay || 750;
window.clearTimeout( soc_id );
soc_id = window.setTimeout( code, delay );
}
// global timer ID for the safeOnChange1 function.
var soc_id = null;
Это некрасиво, но в этом проблема с использованием функции onchange в раскрывающемся списке. Другое решение - функция, время от времени проверяющая значение раскрывающегося списка и вызывающая функцию onchange, если оно изменилось.
Посмотрите учебные пособия, подобные этому: http://onlinetools.org/articles/unobtrusivejavascript /chapter4.html
function addEvent(obj, evType, fn){
if (obj.addEventListener){
obj.addEventListener(evType, fn, false);
return true;
} else if (obj.attachEvent){
var r = obj.attachEvent("on"+evType, fn);
return r;
} else {
return false;
}
}
addEvent(window, 'load', foo);
addEvent(window, 'load', bar);
Есть также способ jquery, если вы можете его найти