Остановка события размытия jQuery в функции размытия - PullRequest
3 голосов
/ 13 октября 2009

У меня есть текстовое поле, в котором я использую событие размытия для проверки текста с помощью регулярного выражения. Если это не удается, я хочу, чтобы текстовое поле сохраняло фокус. Я знаю, что в обычном javascript вы можете сказать return functionName(); в событии onblur внутри фактического элемента управления HTML. Есть ли способ сделать нечто подобное при связывании события размытия внутри функции $(document).ready(). Или просто установите фокус на «это». Спасибо за помощь.

$(document).ready(function() {");
    $('input:text.sqlValidation').blur(function() {");
        var sqlInjectionRegX2 = /...Regex.../;
        var value = this.value;
        if (sqlInjectionRegX2.test(value)) {
            alert('The text you have entered may contain malicious code and can not be submitted.');
            this.value = '';
            return false;
        }
        else return true;
    });
});

Ответы [ 5 ]

6 голосов
/ 13 октября 2009

Использование регулярных выражений в Javascript для предотвращения SQL-инъекций - мать всего (или, по крайней мере, большинства) зла. НЕ ДЕЛАЙТЕ ЭТОГО !!! Вместо этого используйте параметры в своем коде на стороне сервера. Если вы не знаете как, спросите нас. Если вы попытаетесь предотвратить SQL-инъекцию так, как вы это делаете, это будет , а не , и вы потеряете данные или, что еще хуже. Все, что нужно вашему врагу, это отключить Javascript (или создать свой собственный HTTP-запрос), и ваш фильтр будет бесполезен. Кроме того, я не думаю, что можно полностью блокировать внедрение SQL с помощью одного регулярного выражения.


Чтобы ответить на вопрос, попробуйте написать return false или event.preventDefault() в обработчике. Тем не менее, это не будет работать идеально; в Javascript невозможно полностью контролировать фокусировку, как это.

3 голосов
/ 13 октября 2009

Вы можете предотвратить поведение по умолчанию и остановить распространение события, а затем выполнить this.focus () в обработчике. http://docs.jquery.com/Events/jQuery.Event. Любая манипуляция с событием должна выполняться перед любым кодом обработки события.

2 голосов
/ 19 февраля 2013

Мне приходилось иметь дело с чем-то похожим - обработчиком размытия javascript, который срабатывал в виде бесконечного цикла;

Решение было:

var inBlur = false;
jQuery('#the_input_element').blur(function(){
    if (!inBlur) {
        inBlur = true;
        jQuery('#some_other_input_element').focus();
        inBlur = false;
        }
    });

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

1 голос
/ 13 октября 2009

Разве это не просто установить

$(this).focus();

внутри вашей функции размытия где-нибудь?

0 голосов
/ 13 октября 2009

Я думаю, что лучший способ предотвратить внедрение SQL-инъекций без переписывания устаревшего кода для использования параметров ( этот вопрос , который сейчас закрыт) - это удвоить все кавычки и обратную косую черту (заменить ' с '' и \ с \\).

Обратите внимание, что я не специалист по синтаксису SQL, поэтому не могу гарантировать, что это будет непробиваемо.

...