2010-04-21 52 views
2

前言:我相信這非常簡單,但是我已經搜索了該網站& jQuery網站並且無法找出正確的搜索詞來獲得答案 - 請原諒我的無知!由AJAX查詢創建的jQuery監控表單字段

我正在使用jQuery的ajax函數添加額外的表單域,然後需要將額外的ajax函數應用到這些域,但似乎無法讓jQuery在飛行窗體域中監視這些域。

如何讓jQuery使用這些新字段?

$(document).ready(function() { 
    $('#formField').hide(); 
    $('.lnk').click(function() { 
     var t = this.id; 
     $('#formField').show(400); 
     $('#form').load('loader.php?val=' + t); 
    }); 

     //This works fine if the field is already present 
     var name = $('#name'); 
     var email = $('#email'); 
     $('#uid').keyup(function() { 
     var t = this; 
     if (this.value != this.lastValue) { 
      if (this.timer) clearTimeout(this.timer);    
      this.timer = setTimeout(function() { 
       $.ajax({ 
        url: 'loader.php', 
        data: 'action=getUser&uid=' + t.value,   
        type: 'get', 
        success: function (j) { 
        va = j.split("|"); 
        displayname = va[1]; 
        mail   = va[2]; 
        name.val(displayname); 
        email.val(mail); 
        } 
       }); 
      }, 200); 
      this.lastValue = this.value; 
     } 
     }); 
}); 

因此,如果是存在於基本的HTML頁面中的功能的工作原理,但如果到達由$ .load功能它沒有 - 這大概是因爲$(文件)。就緒已全面啓動。

我曾嘗試:

$(document).ready(function() { 
    $('#formField').hide(); 
    $('.lnk').click(function() { 
     var t = this.id; 
     $('#formField').show(400); 
     $('#form').load('loader.php?val=' + t); 
     prepUid(); 
    }); 
}); 

function prepUid(){ 
     var name = $('#name'); 
     var email = $('#email'); 
    $('#uid').keyup(function() { 
snip........... 

但它似乎沒有工作...

回答

2

我想你靠近。 .load調用完成後,您需要添加您的keyup處理程序。嘗試改變這個...

$('#form').load('loader.php?val=' + t); 
    prepUid(); 

要這個......

$('#form').load('loader.php?val=' + t, null, prepUid); 
+0

現貨!非常感謝。 – 2010-04-21 00:38:32

+0

我認爲這個解決方案有效。我已經在live()函數之前多次使用舊的jQuery版本。使用live()函數,您不必擔心順序,並且它有助於將事物分開。只是一個想法... – schmidty 2010-04-21 00:41:56

+0

也許我錯過了一些東西。在代碼中,點擊處理程序被添加到具有.lnk類的元素。通過這些AJAX請求是否將.lnk元素添加到DOM?如果是這樣,你一定要爲這些元素使用.live()。您也可以使用.live(「keyup」,...)作爲輸入字段。我個人傾向於避免使用.live(),除非它絕對必要。只有我... – 2010-04-21 01:04:32

2

你所尋找的是jQuery的直播功能。

附加的處理程序,爲當前選擇,滿足其所有元素的事件,現在或將來

你可以做這樣的事情:

$('.clickme').live('click', function() {// Live handler called.}); 

,然後使用DOM添加東西

$('body').append('<div class="clickme">Another target</div>'); 

當你點擊上面添加的div時,它將觸發點擊處理程序,就像您期望的靜態加載的dom節點一樣。

您可以在這裏閱讀更多:http://api.jquery.com/live/