2011-10-21 37 views
1

我打开一个jQuery对话框内的JavaScript代码,它会打开非常好,这个对话框的内容是一种形式,这种形式的一个输入是:如何运行一个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不会被执行。

这是真的吗?

我真的很感谢任何帮助。

+1

你实际上是否将testonKeyup函数附加到弹出窗体的输入? –

+0

是的,我确实如果我在函数testOnKeyUp()中放置一个警告消息;显示警告,这意味着当用户编写一个密钥的过程中工作正常,直到这个函数,问题看起来好像是在validate()函数 – Saymon

回答

0

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

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

+0

好吧,但是当我在另一个页面中加载这种形式(不喜欢对话框)完成这项工作并且执行$ j.ajax属性。这种对话方式有没有关于你说的不同? – Saymon

相关问题