2012-07-26 75 views
1

基本上我试图创建一个jQuery的AJAX脚本。 但主要的问题是,我想这样定义如何捕捉输入变量jQuery中

$(document).ready(function() { 
    var u = $('#username'); 
    var s = $('#server'); 
    var p = $('#password'); 

    $('#server').keyup(function() { 
     $.post("connect.php", { s: s.value, u: u.value , p: p.value }, 
      function(data) { 
      $('#hol').html('checking connection...' + u.value + " " + p.value + " " + s.value + " " + data); 
          } 
       ); 
    }); 

}); 

的变量,但不知何故没有工作....看来相当奇怪,我不得不用“这个”,而不是定义变量能够事先分配他们。

,工程代码为

$(document).ready(function() { 

    $('#username').keyup(function() { 
     var u = this; 
      $('#password').keyup(function() { 
      var p = this; 
        $('#server').keyup(function() { 
        var s = this; 

        $.post("connect.php", { s: s.value, u: u.value , p: p.value }, 
        function(data) { 
         $('#hol').html('checking connection...' + u.value + " " + p.value + " " + s.value + " " + data); 
             }); }); 
       }); 
        }); 
    }); 

所以我的问题基本上是“如何让我的jQuery赶在文本框中输入,并将其分配给一个变量?像在第一个例子?”或者它没有在很长的路要怎么办?

+0

发送Ajax请求的onkeyup是一个坏主意。添加一些反跳码,因此只有当用户停止输入一段时间(250毫秒可能是件好事)发生。 – ThiefMaster 2012-07-26 11:03:52

+0

您的第一个代码块的选择器不应该是'$('#server,#username,#password')' – JohnP 2012-07-26 11:05:19

+0

“有效的代码”实际上并不奏效:嵌套创建键盘处理程序意味着如果用户输入密码第一由于某种原因,然后#服务器密码永远不会被设置和Ajax调用不会发生。 – nnnnnn 2012-07-26 11:24:18

回答

5

您需要使用.val(),而不是.value

{ s: s.val(), u: u.val() , p: p.val() } 

su,并p是jQuery的对象,而不是DOM元素。

+0

+1,或者你也可以使用s [0] .value以及 – JohnP 2012-07-26 11:04:50

+0

@JohnP是的,但是在这种情况下,你将失去's','u'和'p'元素上的“魔法”jQuery功能。 – Engineer 2012-07-26 11:07:15

1

使用.val();

var u = $('#username').val(); 
var s = $('#server').val(); 
var p = $('#password').val(); 
0

替代您可以使用serialize()方法:

编码一组表单元素的提交

$('#server').keyup(function() { 
     $.post("connect.php", $('input[type=text]').serialize(), 
      function(data) { 
      $('#hol').html('checking connection ' + data); 
     }); 
    }); 
+0

但你仍然有u.value,p.value和s.value这是原代码中的问题.. – nnnnnn 2012-07-26 11:27:36

+0

@nnnnnn谢谢。 – undefined 2012-07-26 11:39:01

0

字符串您可以使用以这种方式

$(document).ready(function() { 
    var u = $('#username'); 
    var s = $('#server'); 
    var p = $('#password'); 

    s.keyup(function() { 
     $.post("connect.php", { s: s.val(), u: u.val() , p: p.val() }, 
      function(data) { 
      $('#hol').html('checking connection...' + u.val() + " " + p.val() + " " + s.val() + " " + data); 
          } 
       ); 
    }); 

}); 
0

您正在使用jQuery选择..

var u = $('#username'); 
var s = $('#server'); 
var p = $('#password'); 

javascript方式访问值....

u.value; //WRONG 

如果您使用jQuery然后以正确的方式是

u.val(); 

u.attr('value'); 

也是一样的V和W :)

+0

_“和以javascript方式访问值”_ - 应该是“以DOM元素方式访问值”。 OP代码的每个部分都包括jQuery“syntax”_is_ JavaScript,但问题在于'.value'是一个DOM元素属性而不是jQuery对象属性。 – nnnnnn 2012-07-26 11:41:26

0

这应该面面俱到:

$(document).ready(function() { 

    var u = $('#username'), 
     s = $('#server'), 
     p = $('#password'); 

    function doYourAjaxCall() { 
    $.post("connect.php", { 
     s: s.val(), 
     u: u.val(), 
     p: p.val() 
    }, 
    function(data) { 
     $('#hol').html('checking connection...' + u.val() + " " + p.val() + " " + s.val() + " " + data); 
    }); 
    } 

    u.keyup(doYourAjaxCall); 
    s.keyup(doYourAjaxCall); 
    p.keyup(doYourAjaxCall); 

}); 

像往常一样,我建议你阅读How Good C# Habits can Encourage Bad JavaScript Habits