如何在jquery对话框中运行JavaScript代码

时间:2011-10-21 15:35:01

标签: javascript jquery dialog

我打开一个jquery对话框,它打开非常好,这个对话框的内容是一个表单,该表单的一个输入是:

<input onkeyup="testOnKeyUp();" type="text" name="userName" id="userName">

这就是我的问题所在,假设当有人在此输入中键入一个Key时,以下代码被激活并应该运行,但它不起作用。

var validateUserNameSpan = $j('#userNameSpan');

function testOnKeyUp(){
validate(this, validateUserNameSpan, 'username');
}

function validate(field, span, property) {

if (field.value != field.lastValue) {
if (field.timer) clearTimeout(field.timer);

field.timer = setTimeout(function () {
    span.value = "";
    span.removeClass('error').html('checking ...');
    $j.ajax({
        url: '/signup/'+property,
        data: property + '=' + field.value,
        dataType: 'json',
        type: 'post',
        success: function (json) {
            updateMessage(span, json.success, json.message);
            if(property=="email"){
                emailValid = true;
            }else if(property=="username"){
                userNameValid = true;
            }
        },
        error: function() {
            ajFailureInitSignup(span);
            if(property=="email"){
                emailValid = false;
            }else if(property=="username"){
                userNameValid = false;
            }
        }
    });
}, 400);


if(userNameValid && emailValid) document.getElementById('buttonLink').onclick=null ;

field.lastValue = field.value;
}
}

我做错了什么?

我不知道,但谷歌搜索我有信息,让我觉得:

$j.ajax({

我在这个对话框里面运行(验证功能)没有被执行,为什么我这么说?因为这个对话框是在DOM中创建的,在创建之后就不会执行这个$ j.ajax。

这是真的吗?

我非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

好的,主要的问题是你的AJAX调用在发出后立即返回 - 这是正常的(它是ajax中的第一个'A' - 异步)。这意味着您的代码会立即继续发送到if (usernamevalid && emailvalid)代码部分。那时变量不存在,因为AJAX调用尚未返回。所以你要比较未定义的变量,这也会失败。

您必须在ajax成功/错误处理程序中移动该比较,以便仅在ajax调用实际生成可以比较的数据时才进行比较。