2013-10-12 50 views
0

更新問題: 我在問我的問題錯了! 如何在.each中捕獲當前元素的click事件?我應該將按鈕ID =分配給當前eq:行,然後找到一種方法在click事件中引用它?按鈕點擊事件沒有捕獲權利元素

或者我應該看變化:FDID: $('.fdid-1').val()喜歡的東西:用按鈕FDID: $('this.fdid-1').val()


動態表單元素,單擊事件不是拍攝包含該按鈕的形式UL。代碼將發送json到php頁面進行處理。使用「文檔」獲取完整頁面,需要深入瞭解元素。

$(document).on("click", ".submit", function(event){ 
alert($(this).text()); 

var form_data = { 
    FDID: $('.fdid-1').val(), 
    CHOICE1: $('.choice-1').val(), 
    CHOICE2: $(".choice-2").val() 
    };  

$.getJSON("modify.php",form_data,function(data){ 
    switch(data.retval){ 
     case 0: $("#status").html("Update successful!"); 
     break; 
     case 1: $("#status").html("Unable to update!"); 
     break; 
     default: $("#description").html("Database error, please try again."); 
     break; 
     } 
}); 
}); 

$.each(data, function (i, val) { 

     ($('<div>') 
     .attr({ 
      'data-role': 'collapsible', 
      'data-content-theme': 'c', 
      'data-collapsed': 'true', 
      'id': 'cResults' 
     }) 
     .html('<h4>' + this.LastName + ', ' + this.FirstName + '</h4>' 
     + '<ul data-role="listview" data-filter="true" data-filter-placeholder="Search Choices..." data-inset="true" class="makecollapsibleul">' 
     + '<li><form id="productForm" action="modify.php" method="post">' 
     + '<label for="fdid-1">FDID:</label>' 
     + '<input type="text" name="fdid-1" class="fdid-1" value=' + this.FDID + '>' 
     + '</li><li>' 
     + '<label for="text-1">Choice 1:</label>' 
     + '<input type="text" name="choice-1" class="choice-1" value=' + this.C1 + '>' 
     + '</li><li>' 
     + '<label for="text-2">Choice 2:</label>' 
     + '<input type="text" name="choice-2" class="choice-2" value=' + this.C2 + '>' 
     + '</li><li>' 
     + 'IP: ' + this.IPADDRESS + '</li><input type="submit" class="submit" value="UPDATE" /></form><li>' 
     + 'Pick Date: ' + this.PICKDATE + '</li>' 
     + '</ul>')) 
     .appendTo('#primary'); 

       //$(".title").append('<li>'+orderNum+' -- '+itemNum+'</li>'); 

     $('#makecollapsible').collapsibleset().trigger('create'); 
     $.mobile.hidePageLoadingMsg(); 

HTML:

<div data-role="page" id="main">  
    <div data-role="header">   
     <h1>JSON DATA</h1>  
    </div><!-- /header -->  

    <div data-role="content"> 
    <div id="status"></div> 
    <div id="description"></div> 
    <ul data-role="listview" id="outer-ul"> 
     <li> 
     <div data-role="collapsible"> 
      <h4>Submitted Choices</h4> 
      <ul data-role="listview" data-inset="true" data-filter="true" id="makecollapsible"> 
       <!-- AJAX CONTENT --> 
      </ul> 
     </div> 
     </li> 
    </ul>   
    </div><!-- /content -->  

    <div data-role="footer">    
    </div> 

</div><!-- /page -->  
+0

你可以張貼一些HTML呢? – Fred

+0

大部分是動態的,並且在提供的代碼中,生病發布html以及 – BarclayVision

+0

如果用另外的東西替換「document」,例如'#outer-ul',這是你的意思嗎?另外,我假設''.each'函數的'data'被設置在其他地方,因爲'$ .getJSON'函數在'$ .each'函數開始之前關閉。 – Fred

回答

0

決定在我的ul中使用post來處理數據 - 不知道爲什麼我不能直接從元素中獲取它。

0

有沒有可能是你有一個以上的元素具有相同的類或ID在網頁上?這會導致你得到錯誤的元素。

+0

no - 全部設置爲 – BarclayVision

0

嘗試所有的元素後添加此代碼加載:

$('.submit').click(function(){ 
... 
}); 

提示:儘量避免html標籤混合成字符串並添加數據形成的服務器,你可以使用一個模板引擎,而不是。 (如jQuery模板...)。

+0

,嘗試過,動態內容需要.on函數,當前$(文件).on允許觸發點擊事件,'$('。submit')。點擊不會達到可摺疊的div – BarclayVision

0

當你點擊提交按鈕時,你應該從你的表單中找到有點擊按鈕的輸入。

如果您有多個具有相同類別的輸入,則$(".myClass").val()將返回第一個元素值。

所以,解決的辦法是讓窗體和查找表格內的輸入:

$(document).on("click", ".submit", function(event){ 
    var $form = $(this).closest("form"); 
    //event.stopPropagation(); 
    var form_data = { 
     FDID: $('.fdid-1', $form).val(), 
     CHOICE1: $('.choice-1', $form).val(), 
     CHOICE2: $(".choice-2", $form).val() 
    }; 
});