2012-07-26 76 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