1

我正在尝试使用jQuery 验证远程方法来检查值是否是唯一的 在提交时添加规则以防止在每次击键时触发它

var Id = $("#id").val();

$('#form').on('submit', function (e) {
    e.preventDefault();
    var newValue = $('#input').val();

$('#input').rules('add', {
    'remote': {
        url: '/MyController/CheckValue',
        type: 'POST',
        data: {
            id: Id,
            value: newValue
        }
    },
    messages: {
        'remote': 'This value is not valid'
    }
});

if ($('#form').valid()) {
    window.console.log('valid')
    // do something
}

$('#input').rules('remove', 'remote');
});

调用服务后,该操作返回 true 或 false

[HttpPost]
public JsonResult CheckValue(int? id, string value)
{
    bool available;
    using (var myServiceClient = new MyServiceClient())
    {
        available = myServiceClient.IsValueAvailable(id, value);
    }
    return this.Json(available);
}

该规则工作正常,但每次都$('#form').valid()返回,true因为它没有等待远程规则完成它的调用。

这篇文章建议async: false在远程规则声明中使用,但这会冻结浏览器。文档中的示例没有使用它,因此没有它应该可以工作。

我的验证规则有问题吗?

4

1 回答 1

0

根据文档,您应该将规则和验证方法直接附加到表单并使用submitHandler如下回调:

$('#form').validate({
    rules: {
        inputName: {
          remote: {
            url: '/MyController/CheckValue',
            type: 'POST',
            data: {
                id: Id,
                value: newValue
            }
        }
    },
    messages: {
        inputName: {
            remote: 'This value is not valid'
        }
    },
    submitHandler: function(form){
        // Do Stuff with Form
    }
}

我希望这有帮助!

于 2013-05-28T15:48:48.937 回答