【问题标题】:livevalidation.js custom username check functionlivevalidation.js 自定义用户名检查功能
【发布时间】:2011-08-05 18:37:23
【问题描述】:

我确信这可能是我没有做的简单事情。运行 livevalidation.js jquery 插件 (livevalidation.com)。它提供自定义函数回调。我正在尝试检查用户名的可用性。服务器端工作正常,我在数据变量中得到了正确的响应......

这是我的 JS:

Validate.Username = function(value, paramsObj) {
    var paramsObj = paramsObj || {};
    var message = paramsObj.failureMessage || "Username is not available";
    var isSuccess = true;

    $.post("<?php echo fURL::getDomain(); ?>/ajax/username", 
        function(data) {
            if (data.status === 'notavailable')
            {
            Validation.fail('oops, not available.');
            }               
            });
};

我是这样称呼它的:

var username = new LiveValidation('username', { validMessage: curr_username + "is available!" });
username.add( Validate.Presence, { failureMessage: "Choose a username" });
username.add( Validate.Username, { failureMessage: "Username is not available." } );

我遇到的问题是:

Uncaught ReferenceError: Validation is not defined

如果我将Validation.fail() 放在我的.post() 函数之外,它就可以正常工作。所以我很确定这是因为它无法在 .post() 函数中被引用。

我尝试过使用回调函数

if (data.status === 'notavailable')
{
    status_not_available();
}

我得到同样的错误。

我意识到这可能非常简单,但我们将不胜感激。提前谢谢你。

【问题讨论】:

    标签: php jquery validation livevalidation


    【解决方案1】:

    我也有同样的问题。 我发现了以下内容,http://forum.jquery.com/topic/ajax-return-value-on-success-or-error-with-livevalidation,但无法使其正常工作。 但是,是的!就在此时,我制作了 som(蹩脚的)javascript 插件,让它表现得很好,我想 :)

    这是我用的。

    函数 check_avail(名称,id,postUrl) { var dataVal = name+'='+$(id).val(); var isaccepted = '' $(id).next('div').remove(); $(id).after("

    Undersøger om "+name+" er ledigt

    "); $.ajax({ 网址:postUrl, 缓存:假, 类型:'发布', 数据类型:'json', 数据:数据值, 异步:假, 成功:函数(数据){ 如果(data.success == 'true') { $('#'+name+'-availability').remove(); //返回假; 已接受 = 假; } 如果(数据.成功 == '假') { $('#'+name+'-availability').remove(); // name.destroy(); 已接受 = 真; } } }); 如果(已接受 == 假){ 返回假; } 别的{ 返回真 }; }

    f1.add( Validate.Custom, { 反对: function() { return check_avail('brugernavn', '#ft001', 'usernamecheck.asp'); }, failureMessage: 'Brugernavnet er optaget' } );

    希望对你有帮助:) 您可以在开头的链接上阅读 json 查询:) (我一点也不擅长 javascript,而且“被接受”的解决方案可能会变得更好)

    【讨论】:

    • 效果很好。唯一的事情是让它在没有异步关闭的情况下做到这一点......我一直在阅读有关执行同步请求的内容,从我读到的内容来看这是一件坏事,因为它可以锁定浏览器 ui 直到请求已完成。
    • 哦,我没有解决方案,但是如果你找到了,请写在这里。
    【解决方案2】:

    尝试将其从 Validation.fail 更改为 Validate.fail

    尝试将其包装在另一个函数中,并尝试将 validateStatus(status) 函数放在 Validate.Username 函数的内部和外部。下面的例子在里面

    Validate.Username = function(value, paramsObj) {
    var paramsObj = paramsObj || {};
    var message = paramsObj.failureMessage || "Username is not available";
    var isSuccess = true;
    
    $.post("<?php echo fURL::getDomain(); ?>/ajax/username", 
        function(data) {
              validateStatus(data.status);      
            });
    
    function validateStatus(status){
         if (status === 'notavailable'){
               Validate.fail("not available");
          }
    }
    
    };
    

    【讨论】:

    • 感谢您的回复....是的,抱歉,这是一个错字,它应该是 Validate.fail().... 使用 Validate.fail() 而不是参考错误我明白了:Uncaught [object Object] Validate.failplugins.js:6 (anonymous function)signup:134 f.extend._Deferred.e.resolveWithjquery.min.js:16 wjquery.min.js:18 f.support.ajax.f.ajaxTransport.send.djquery.min.js:18 我很确定这是因为我正在尝试使用 jquery 函数访问对象并且它超出了它的范围......我怎样才能把它放在范围内?再次提前感谢您。
    • 如果您尝试将其更改为 this.fail 或 $(this).fail 是否有效?
    • 这也没有用。这就是我所做的。对我来说,这似乎很草率,所以非常感谢任何建议。这开始于function(data) { if (data.status === 'notavailable') { $('#username').next().text('username is not available.').removeClass('LV_valid')。 addClass('LV_invalid'); $('#username').removeClass('LV_valid_field').addClass('LV_invalid_field'); }
    • 抱歉,我似乎无法弄清楚 cmets 中的格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多