停止模糊功能中的jQuery模糊事件

时间:2009-10-13 13:27:29

标签: jquery events focus blur setting

我有一个文本框,我正在使用模糊事件来使用正则表达式验证文本。如果失败,我希望文本框保持焦点。我知道在常规的javascript中你可以在实际的html控件中的onblur事件中说return functionName();。在$(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 个答案:

答案 0 :(得分:6)

在Javascript中使用正则表达式来防止SQL注入是所有(或至少是大多数)邪恶的母亲。 请勿这样做!!! 而是使用服务器端代码中的参数。如果您不知道如何,请问我们。如果您尝试以您的方式阻止SQL注入,它将工作,您可能会丢失数据,或者更糟。你所有敌人需要做的就是禁用Javascript(或制作他自己的HTTP请求),你的过滤器将毫无用处。另外,我认为用单个正则表达式完全阻止SQL注入是不可能的。


要回答这个问题,请尝试在处理程序中编写return falseevent.preventDefault()。但是,它不会完美地运作;在Javascript中无法像这样完全控制焦点。

答案 1 :(得分:3)

您可以阻止默认行为并停止事件传播,然后在处理程序中执行this.focus()。 http://docs.jquery.com/Events/jQuery.Event。任何事件操作都应该在任何事件处理代码之前完成。

答案 2 :(得分:2)

我必须处理类似的东西 - 一个javascript模糊处理程序,它在一种无限循环中触发它自己;

解决方案是:

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

我知道这并没有回答所提出的确切问题,但它解决了主题(在模糊函数中停止jQuery模糊事件),因此它可能对某些人有用。

答案 3 :(得分:1)

不仅仅是设置

$(this).focus();

你的模糊功能在哪里?

答案 4 :(得分:0)

我认为,防止SQL注入而不重写遗留代码以使用参数(this question,现在已关闭)的最佳方法是将所有引号和反斜杠加倍(替换{{1} } ''' \}。

请注意,我不是SQL语法方面的专家,所以我不能保证这是不可穿透的。