2011-02-25 151 views
0

我想访问一个类=“emailSent”的div,但我无法达到div。jquery:访问元素

这里是在PHP while循环所产生的HTLML代码:

<tr><td>TR 1</td></tr><tr> 
    <td colspan="7"> 
     <div class="replyDiv" align="center" style="display:none; margin:10px 60px 10px 10px;"> 

      <form width="350px" id="userReplyForm" name="userReplyForm" method="post" action="#"> 
      <input type="hidden" id="date" name="date" value="'.time().'"/> 
      <input type="hidden" id="sender" name="sender" value="'.$username.'"/> 
      <input type="hidden" id="recipient" name="recipient" value="'.$sender.'"/> 
      <table align="center" width="350px" class="smallTxt userDetails"> 
       <tr> 
        <td align="left" width="350px"><input type="text" id="subject" name="subject" size=30 value="RE:'.$subject.'"/></td></tr> 
       <tr> 
        <td width="350px"><textarea rows="6" cols="42" id="message" name="message"></textarea></td></tr> 
       <tr> 
        <td align="center"><input type="submit" name="Submit" class="submitBtnSmallLong" value="Send Reply"/></td></tr> 
      </table> 
      </form> 

     </div> 
     <div class="emailSent" align="center" style=" margin:10px 60px 10px 10px; color:blue; font-size:18px;"> 
     </div> 
    </td> 
</tr> 

所以我有什么是对每条记录生成2行的表中。我如何才能访问该记录的相应的div (我不想更新所有div的行,只是一个正在工作): 1)div与类“replyDiv”? 2.)与类“emailSent”的div?

我试图用$(“。replyDiv”)直接访问div。但它不起作用。

好,这里是jQuery的部分:

$(function(){//getUserReply, send to process.php 
     $("form").submit(function(){ 
      var dataString = $(this).serialize(); 
      var message = $(this).find("#message").val(); 

     if(message==""){alert("Please enter your message"); 
      }else{ 
      $.ajax({ 
       type: "POST", 
       url: "process.php", 
       action: "submitForm", 
       data: dataString, 
       dataType: "JSON", 
       cache: false, 
       success: function(data){ 
        if(data == "true"){//hide replyDiv and show emailSent div 
         $("form").closest("tr").find(".emailSent").append("hello"); //this line appends hello to all the .emailSent divs. Remember, I have many rows so only want this particular div being shown.      
         return false; 
        } 

       } 
      }); 

     } 
      return false; 
     }); 
    }); 
+0

好的,所以我发现如果我使用$(“form”)。closest(“tr”)。find(“。emailSent”)。append(“hello”); \t这将访问所有具有className .emailSent的div。所以现在,我只需要找到一种方法来访问只有特定的div而不是全部 – Johny 2011-02-25 00:32:10

+0

问题是,从*哪里*/*何时*你想访问的元素?你写*我如何才能访问该记录的相应的div *因此,您必须在特定的时刻访问这些元素。例如。当表单提交时你想访问元素吗?或者某个按钮被按下了? – 2011-02-25 00:33:14

+0

FelixKing,起源点在答复Div。用户选择CORRESPONGING邮件,在第5行说,然后键入他们的消息,点击提交。然后,我将这些数据发送到一个php页面进行处理,如果一切都恢复正常,在成功之下:function(){//这里我想隐藏.replyDiv并仅显示该PARTICULAR当前行的.emailSent div,与一个消息发送成功或某种性质//}我怎么能达到这个@Johny – Johny 2011-02-25 00:37:06

回答

1

更新:

这里是你的代码的版本,应该工作(基本上它只是将我下面写的,我也改组了一点):

$("form").submit(function(e){ 
    e.preventDefault(); // <- better than `return false` 

    // get reference to elements: 
    var $replyDiv = $(this).parent(); 
    var $emailSent = $(this).parent().next(); 
    // or 
    // var $emailSent = $(this).closest('td').find('.emailSent'); 

    // you should give the form elements classes! 
    if(!$(this).find("#message").val()){ 
     $.ajax({ 
      type: "POST", 
      url: "process.php", // `action` does not exist as option 
      data: $(this).serialize(), 
      dataType: "JSON", 
      cache: false, 
      success: function(data){ 
       if(data == "true"){//hide replyDiv and show emailSent div 
       $replyDiv.hide(); 
       $emailSent.append('hello').show();     
       } 
      } 
     }); 
    } 
    else { 
     alert("Please enter your message"); 
    } 
}); 

根据您最后的评论,我想你将通过Ajax请求将表单数据发送到服务器,并且您想访问success回调中的某些特定信息。

$('.replyDiv form').submit(function(e) { 
    e.preventDefault(); 

    //    form   emailSent 
    //     v    v 
    var $emailSent = $(this).parent().next(); 
    //      ^
    //      replyDiv 

    $.ajax({ 
     //... 
     success: function() { 
      // here you want the reference 
      $emailSent.text('Worked!'); 
     } 
    }); 
}); 

顺便说一句。如果你真的有多个这样的行,那么你不能给表单元素ID。

+0

是的,就是这样的!我会将这部分内容发布到我原来的帖子中。请看看我的错误 – Johny 2011-02-25 00:45:13

+0

哦,我的天!我是一个天才......好吧,你们都是天才,哈哈。非常感谢。它正在工作!谢谢Felix。我真的很喜欢你组织我的代码人的方式!我希望有一天我的代码将被高效地编写成你的代码 - 现在,我仍然是学习的小菜鸟。 – Johny 2011-02-25 01:06:25

+0

@Johny:你的欢迎:)有趣的是,似乎我总是可以更好地构建其他人的代码比我自己;)顺便说一句。您应该通过点击旁边的勾号大纲来接受最能帮助您的答案。你把你的问题标记为解决了这个问题(你应该为每个有满意答案的问题都做这件事,所以你以前的问题也解决了)。 – 2011-02-25 01:12:31

2

看看你的代码,你将它定义为一个类不能作为ID

<div class="emailSent" align="center" style=" margin:10px 60px 10px 10px; color:blue; font-size:18px;"> 
    </div> 

需要改变类ID

<div id="emailSent" align="center" style=" margin:10px 60px 10px 10px; color:blue; font-size:18px;"> 
    </div> 
+0

但如果我将其更改为一个ID,并且由于我将有多个具有相同ID的行,那么我将如何访问,比如说第4行中的div? – Johny 2011-02-25 00:23:10

+0

反正你不能多次使用一个ID。 jQuery将始终选择使用该名称查找的第一个ID。 – iwasrobbed 2011-02-25 00:25:48

+0

这正是我的观点。我在原始帖子中输入了错字。我有我的div设置为.className。我的问题是,如果我试过的东西不能让我访问这些div,我该如何访问这些div? – Johny 2011-02-25 00:29:01