Вам просто нужно поместить функцию в событие keyup вашего поля запроса.
$(function() {
function numHits(n, h) {
var c, re = new RegExp(n, "g");
c = (h.match(re) || []).length;
return c;
}
$("#keyword-input").keyup(function(e) {
e.preventDefault();
$("#keyword-count").html(numHits($("#keyword-input").val(), $("#my-txt-area").val()));
});
});
Существует интервью с Создателем C# Anders Hejlsberg, который затрагивает предмет здесь. В основном, точно что заявил @Marc Gravell: typesafety сначала, небезопасность явным объявлением.
Таким образом отвечать на Ваш вопрос: ничто в CLR не предотвращает его; это - идиома языка, разработанная, чтобы позволить Вам работать с перчатками безопасности при контакте с типами. Если Вы хотите снять перчатки, это - Ваш выбор, но необходимо сделать активный выбор для снимания перчаток.
Править:
Для разъяснения: Я знаю, каков "небезопасный" и "безопасный" код. Это - просто вопрос того, почему мы должны сделать всю дополнительную работу (хорошо, не ТАК очень дополнительный) только, чтобы смочь использовать эти функции.
Как упомянуто в интервью я связался, это было явное проектное решение. C# является по существу эволюцией Java и в Java, у Вас нет указателей вообще. Но разработчики хотели позволить указатели; однако, потому что C# обычно вводил бы Java-разработчиков, они чувствовали, что это будет лучшим если поведение по умолчанию быть подобным Java, т.е. никаким указателям, все еще позволяя использование указателей явным объявлением.
Таким образом, "дополнительная работа" является преднамеренной, чтобы вынудить Вас думать о том, что Вы делаете, прежде чем Вы сделаете это. Будучи явным, это вынуждает Вас, по крайней мере, рассмотреть: "Почему я делаю это? Мне действительно нужен указатель, когда ссылочный тип будет достаточен?"
Это в основном о том, чтобы быть поддающимся проверке. Путем утверждения unsafe
, перчатки прочь - система больше не может гарантировать, что Ваш код не взбесится. В большинстве случаев очень желательно остаться в безопасной зоне.
Это становится более примечательным с частичным доверием (дополнения и т.д.), но все еще ценно в обычном коде.
На самом деле CLR не делает требований вообще о / небезопасном переключателе или ключевом слове. На самом деле C++ / CLI (язык C++, который работает под CLR) не имеет такого / небезопасного переключателя, и указатели могут использоваться свободно на CLR.
Таким образом, я перефразировал бы Ваш вопрос как, "Почему C# требует использования/, небезопасных, прежде чем указатели смогут использоваться?" И ответ на тот вопрос столь же указан в других ответах, данных здесь: помочь пользователю принять сознательное решение потерять способность работать в чем-то меньшем чем режиме Full Trust на CLR. C++ фактически всегда требует Полного Доверия на CLR, и C# может каждый раз, когда Вы называете код, который требует Полного Доверия, или каждый раз, когда Вы используете указатели.
При использовании небезопасного блока он имеет эффект создания не поддающегося проверке кода. Это требует определенных полномочий выполниться, и Вы не могли бы хотеть позволять его в своем выводе (особенно, если Вы находитесь в общей исходной среде), таким образом, существует переключатель в компиляторе для запрещения его.
Так, чтобы это было сразу очевидно, какой код не будет работать в веб-сервисах без поднятых полномочий и т.д.
Думайте об этом с противоположной точки зрения: потому что это не отметило небезопасный, можно вывести, что большая часть кода "безопасна" по умолчанию. Таким образом что означает быть "безопасным"? Для кода .NET это включает (но может не быть ограничен):
Любое время Вы используете указатели, у Вас есть шанс повредить любую из тех гарантий. Поэтому кодовая маркировка как небезопасная бросает те меры защиты.
Короче говоря.NET хочет, чтобы Вы заявили свое намерение.
Несомненно, компилятор мог вывести потребность в "небезопасном" флаге. Но разработчики хотят, чтобы это было преднамеренным решением.
Мне это сродни многим синтаксическим требованиям в C#:
Шаблон - то, что Вы не должны перемещать или изменять одну вещь и непреднамеренно влиять на другого. В причине они хотят сохранить Вас от "стрельбы в себя в ноге".
Много больших, информативных ответов здесь — возможно, это переходит больше к Вашему вопросу.
Старшее значащее различие между безопасным и небезопасным кодом - то, что небезопасный код недостижим сборщиком "мусора" .NET. Автоматический GC является огромной частью жаргона .NET и, когда Вы идете вне его границ, Вы изменяете многое из того, что может быть принято о Вашем коде.
Указатели в особенности допускают создание объектов на "куче" без ссылок GC. Это приводит к другой превосходной причине потребовать, чтобы код был отмечен как "небезопасное". Это помогает сузить, куда утечка памяти прибывает из того, когда Вы понимаете, что у Вас есть тот.
Лелеяние хороших привычек и безопасности. Каждый раз, когда Вы используете небезопасный блок в блоке, разрешение NativeCode будет потребовано от стека. Это могло, конечно, быть сделано неявно, но мы не могли также просто удалить частное ключевое слово полностью? Я думаю, что хорошо вынудить разработчиков конкретно потребовать небезопасного кода, прежде чем они смогут использовать его.