5

我是 JS 的菜鸟,理解 JQUERY 语义有问题。

我有一个用于检查单元格内容的函数。

问题:该功能刚刚在单元格失去焦点时启动,如果我单击提交,首先显示错误,然后它将运行该功能。

即使我在单元格内,我也希望该函数运行。怎么做?

由此发起:

$(".user_id").blur(function(){ validateUserId($('.user_id')); });

功能:

function validateUserId(reference) {
    if ( 5 == $(reference).val().length ) {
        $.get('index.php?user=' + $(reference).val(), function(data) {
            if ( "error" == data ) {
                $(reference).parent().parent().addClass('error');
                alert('error');
            } else {
                $(reference).parent().parent().removeClass('error');
                $(reference).addClass('valid');
                $(reference).parent().parent().addClass('success');
            }
        });
    } else {
        alert('short');
        $(reference).parent().parent().addClass('error');
    }
}
4

5 回答 5

4
$(".user_id").on('keyup', function(){
   validateUserId($(this)); 
});
于 2012-05-14T12:12:37.947 回答
1

我会使用 keyup 事件。因此,每当有人在您的输入单元格中键入一个键时,该函数就会被执行。

 $(".user_id").on("keyup", function(){ validateUserId($(this)); });

我更改了 $(".user_id"),您将值从 , 更改为 $(this)。因为你想要你做了 keyup 事件的字段的值。(而不是其他字段,如果有 2 个具有相同 .user_id 类的字段。)

于 2012-05-14T12:14:16.540 回答
0

这是一个工作演示http://jsfiddle.net/pomeh/GwswM/。我已经将代码改写为:

  • 将 DOM 选择缓存到变量中,
  • 使用 jQuery 方法链接,
  • if用三重等号改善条件,
  • 分离 AJAX 调用和应用程序逻辑,
  • 缓存相同的 AJAX 调用,
  • 使用jQuerydeferred隐藏验证的异步方面(链接到AJAX)

希望这会有所帮助:)

于 2012-05-14T16:07:05.213 回答
0

尝试在焦点事件上绑定功能

于 2012-05-14T12:11:54.003 回答
0
$("input[submit]").click(function(e){
    e.preventDefault();
    var valid = validateUserId($('.user_id')); // maybe the function could return a boolean value too instead of just adding classes to the HTML part
    if (valid) {
        $("#your_form_id").submit(); // only if the input is valid, submit it
    }
});

关于您的问题的旁注:如果您单击提交按钮,它将首先触发提交操作,这可能会给您一个错误,然后执行blur()代码块

于 2012-05-14T12:17:32.953 回答