2013-01-07 68 views
0

我通過ajax獲取數據。我有一個數組保存所有數據。現在我正在運行一個循環遍歷數組並動態創建一個對應於每個對象的'p'和'按鈕'在array.If的元素我按一下按鈕對應的「p」的innerHTML應該傳遞給Ajax和按鈕必須disappear.Here是什麼,我試圖樣本:用jquery隱藏動態創建的元素

<script> 
for(var i=0;i<foo.length;i++) 
{ 
    addElement(foo[i],i); 
} 
function addElement(foo,i) 
{ 
    ni=document.getElementById("asdf"); 
    new_but=document.createElement('input'); 
    new_p=document.createElement('p'); 
    new_p.id='text'+toString(i); 
    new_p.innerHTML=foo; 
    new_but.type='button'; 
    new_but.value='add'; 
    new_but.id=toString(i); 
    new_but.className='but'; 
    ni.appendChild(new_p); 
    ni.appendChild(new_but); 
} 
$(document).ready(function(){ 
    $('.but').each(function(){ 
     $(this).click(function(){ 
      $.ajax({ 
       type:'POST', 
       data:'awdwad', 
       url:'aadwewq.php', 
       success:function(result) 
       { 
        if(result==no_error) 
        $(this).hide(); 
       } 
});});});}); 
</script> 

的元素創建的,但我我以後無法使用他們的ID或帶有jQuery的類訪問它們。

+0

你確保你能獲得正確的價值了? result == no_error表示來自ajax = result和no_error的數據是另一個變量。 – Alex

回答

4

的問題是,因爲click處理程序被分配的onload,當.but元件不存在。您需要單擊處理程序委託給這樣的父元素:

$(document).ready(function(){ 
    $('#asdf').on('click', '.but', function(){ 
     $.ajax({ 
      type:'POST', 
      data:'awdwad', 
      url:'aadwewq.php', 
      success:function(result) { 
       if (result == no_error) 
        $(this).hide(); 
      } 
     }); 
    }); 
}); 

此外,您還可以使用jQuery這樣縮短addElement功能:

function addElement(foo, i) { 
    var $ni = $('#asdf'); 
    var $p = $('<p></p>', { 'id', 'text' + toString(i) }).html(foo).appendTo($ni); 
    var $button = $('<input></input>', { 
     'type': 'button', 
     'id': toString(i), 
     'class': 'but' 
    }).appendTo($ni); 
} 
+0

我建議在'if'中加上括號'{}'。沒有必要,但需要練習。 – Cerbrus

+0

謝謝,我得到它的權利。我有可能分配點擊處理程序 – Tyranicangel

2

使用.on並在某些父對象或文檔上附加事件。也不需要迭代對象。

$(document).on("click", ".but", function(){ 
}); 
+0

事實上,正確的方式不需要每個按鈕的監聽器。 – kidwon

0

thissuccess回調您$.ajax呼叫內指的是ajax調用本身。 您應該首先參考按鈕。

隨着其他答案的反饋相結合:

$(function() { 
    $(document).on('click', '.but', function() { 
     var btn = $(this); 
     $.ajax({ 
      type:'POST', 
      data:'awdwad', 
      url:'aadwewq.php', 
      success:function(result) 
      { 
       if(result==no_error) 
       $(btn).hide(); 
      } 
     }); 
    }); 
}); 
0
function addElement(foo,i){ 
    ni=document.getElementById("asdf"); 
    new_but=document.createElement('input'); 
    new_p=document.createElement('p'); 
    new_p.id='text'+i; //remove toString 
    new_p.innerHTML=foo; 
    new_but.type='button'; 
    new_but.value='add'; 
    new_but.id=i; // remove toString 
    new_but.className='but'; 
    ni.appendChild(new_p); 
    ni.appendChild(new_but); 
} 
+0

也作爲ThiCE建議,得到點擊btn的引用,以便它可以被成功函數訪問。檢查此URL http://jsfiddle.net/UC5gb/2/ – zdesam

+0

目前測試與錯誤功能,因爲Ajax調用失敗,在我的測試 – zdesam