Предотвращение определенных слов в текстовом поле - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь предотвратить ввод определенных слов в текстовое поле с помощью js в моем магазине WordPress. Я использую тему лавочника.

Я начал с создания файла в корне моего сайта под названием avotext.js и ввел следующий код, показанный в этом фрагменте:

var banned = ['MMM','XXX'];
document.getElementById('field_1_17').addEventListener('keyup', function(e) {
    var text = document.getElementById('field_1_17').value;
    for (var x=0;x<banned.length;x++) {
        if (text.search(banned[x]) !== -1) {
            alert(banned[x]+' is not allowed!');
        }
        var regExp = new RegExp(banned[x]);
        text = text.replace(regExp,'');
    }
    document.getElementById('field_1_17').value = text;
},false);
<input id="field_1_17" />

Затем я перешел к своему основному файлу функций и внизу ввел:

function enqueue_my_custom_script() {
    wp_enqueue_script( 'avoidtext', 'https://reubenstore.com/avoidtext.js', false );
}

add_action( 'wp_enqueue_scripts', 'enqueue_my_custom_script' );

это ничего не делает. Я просмотрел исходный код страницы и там есть сценарий избежания текста. спасибо.

1 Ответ

0 голосов
/ 29 сентября 2019

Проблема в том, что ваш скрипт выполняется до того, как браузер сможет полностью проанализировать DOM. Согласно вашему коду, ваш JS-файл внедряется в раздел <head> вашего веб-сайта, а ваш элемент находится где-то далеко внизу внутри тега <body>. Таким образом, в вашем сценарии ваш элемент field_1_17 не существует, поэтому он не может добавить функцию прослушивателя событий.

Два способа исправить это:

Опция 1. Вместо этого вставьте ваш скрипт в раздел нижнего колонтитула вашего сайта:

function enqueue_my_custom_script() {
    wp_enqueue_script(
        'avoidtext', // slug
        'https://reubenstore.com/avoidtext.js', // path to script
        array(), // dependencies
        true // wether to place the script in the head section (false) or in the footer section (true)
    );
}

add_action( 'wp_enqueue_scripts', 'enqueue_my_custom_script' );

Таким образом, к тому моменту, как ваш скрипт будет прочитан браузером, ваш элемент уже будет проанализирован им, что сделает его доступным дляваш скрипт.

Вариант 2. Запустите ваш скрипт после того, как DOM будет готов к манипулированию:

Используйте событие DOMContentLoaded , чтобы запустить ваш скрипткогда браузер полностью проанализировал HTML-код вашего сайта:

document.addEventListener('DOMContentLoaded', function(){

    var banned = ['MMM','XXX'];
    document.getElementById('field_1_17').addEventListener('keyup', function(e) {
        var text = document.getElementById('field_1_17').value;
        for (var x=0;x<banned.length;x++) {
            if (text.search(banned[x]) !== -1) {
                alert(banned[x]+' is not allowed!');
            }
            var regExp = new RegExp(banned[x]);
            text = text.replace(regExp,'');
        }
        document.getElementById('field_1_17').value = text;
    }, false);

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...