Загрузка скрипта после создания тега textarea

0

Я использую этот скрипт, который привязывается ко всей текстовой области каждую секунду. Я использую его таким образом, поскольку эти текстовые поля загружаются динамически (после создания страницы и загрузки этого сценария). Я бы предпочел иметь скрипт, который выполняется каждый раз, когда создается новая текстовая область. Как я мог это сделать?

Я использую этот скрипт как пользовательский заголовок. У меня нет доступа к остальной части кода.

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);
  • 1
    как отступление - вы захотите сделать setInterval для вашего doautoc корректного, а не бесконечно рекурсивного setTimeout внутри функции, в которой вы делаете setTimeout!
  • 0
    @splig Спасибо за это, не знал о setInterval
Теги:
textarea

1 ответ

1
Лучший ответ

Вы должны использовать делегированный обработчик событий, который будет автоматически привязан к любой текстовой области, которая позже добавляется в DOM:

$("body").on("keyup", "textarea", function() {
     // $(this) will be a reference to the current textarea
})

И вы, вероятно, должны сделать autoCorrect пройти через набор определенных значений вместо того, чтобы многократно вызываться для каждого значения таймера. Просто позвольте событию keyup обрабатывать вещи.

var replaceThis = "=>,->,+-".split(",")
var withThis = "⇒,→,±".split(",")

... затем перебираем значения.

  • 0
    Первая часть работает, собираюсь попробовать, смогу ли я заставить вторую часть работать. Спасибо !
  • 0
    Привет, у меня мало проблем с этим. Не могли бы вы помочь мне в реализации вашей второй идеи, с этим jsfiddle? jsfiddle.net/4SWy6 Не стесняйтесь игнорировать этот комментарий.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню