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

How to run a JavaScript code inside of a jquery dialog

本文关键字:运行 JavaScript 代码 对话框 jquery      更新时间:2023-09-26

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

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

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

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

是真的吗?

谢谢你的帮助。

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

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