2013-10-12 45 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() 
    }; 
});