Я использую этот скрипт, который привязывается ко всей текстовой области каждую секунду. Я использую его таким образом, поскольку эти текстовые поля загружаются динамически (после создания страницы и загрузки этого сценария). Я бы предпочел иметь скрипт, который выполняется каждый раз, когда создается новая текстовая область. Как я мог это сделать?
Я использую этот скрипт как пользовательский заголовок. У меня нет доступа к остальной части кода.
function autoCorrect(searchString, replaceString) {
$("textarea").keyup(function (e) {
// escape some regex chars
var escapedString = searchString.replace(/([\\.*+?|()\[\]{}])/g, "\\$1");
// finds current cursor position
var pos = $(this).prop("selectionStart");
// this turns the textarea in a string
var text = $(this).val();
//only search for strings just typed
var stringToSearch = text.substring(pos - searchString.length, pos);
if (new RegExp(escapedString).test(stringToSearch) === true) {
//if there is a match put the replaceString in the right place
var newText = text.substring(0, pos - searchString.length) + replaceString + text.substring(pos);
$(this).val(newText);
//adjust the cursor position to the new text
var newpos = pos - searchString.length + replaceString.length;
this.setSelectionRange(newpos, newpos);
}
});
}
setInterval(function(){
autoCorrect("=>", '⇒');
autoCorrect("->", "→");
autoCorrect("+-", "±");
autoCorrect("<=", "≤");
autoCorrect(">=", "≥");
autoCorrect("(c)", "");
autoCorrect("(e)", "€");
autoCorrect("|__", "⌊");
autoCorrect("__|", "⌋");
autoCorrect("|--", "⊢");
autoCorrect("|==", "⊨");
},1000);
Вы должны использовать делегированный обработчик событий, который будет автоматически привязан к любой текстовой области, которая позже добавляется в DOM:
$("body").on("keyup", "textarea", function() {
// $(this) will be a reference to the current textarea
})
И вы, вероятно, должны сделать autoCorrect пройти через набор определенных значений вместо того, чтобы многократно вызываться для каждого значения таймера. Просто позвольте событию keyup обрабатывать вещи.
var replaceThis = "=>,->,+-".split(",")
var withThis = "⇒,→,±".split(",")
... затем перебираем значения.