2013-04-28 38 views
1

如何用新的p替換p的當前內容?我目前的解決方案不起作用。響應返回,所以如果我在函數(響應){}內部放置一個警報(「Something」),它就會起作用。內容不會被替換,這是沒有任何反應!使用jQuery更改p標籤的內容

   $(this).find(".caption").find("#yes").live('click', function() { 
       $.ajax({ 
        url: 'prob.php', 
        data: {action: 'yes'}, 
        type: 'post', 
        success: function (response) { 
          $(this).find(".caption").find("#change").html("<p>Come on!</p>"); 
         } 
        }); 
       }); 

這是我的html:

    <li> 
         <a class="thumb" name="leaf" href="<?php echo $images_dir.$_SESSION['current_img'].".jpg" ?>" title="Title #0"> 
          <img src="<?php echo $images_dir.'thumbs/'.$_SESSION['current_img'].".jpg" ?>" alt='Title #0' /> 
         </a> 
         <div class="caption" id="current"> 
         <div class="image-title"> 
          <p id="change">Image shows a nautillus shell: 
           <input type="checkbox" id="yes">Yes 
           <input type="checkbox" id="no">No 
          </p> 
         </div>         
        </li> 
+0

究竟什麼不行?成功沒有成功,錯誤的因素是否會改變?是否有意外添加的東西?請說*完全*什麼不工作,所以我們知道你遇到什麼,而不需要逆向工程你的代碼。祝你好運! – jmort253 2013-04-28 20:40:44

+1

你的成功處理程序中的'this'是指窗口對象。 – undefined 2013-04-28 20:41:03

回答

3

你真的需要遍歷DOM樹?因爲你需要的兩個元素都有(希望)唯一的ID,這意味着你可以直接訪問它們。

Here是一個簡化的js小提琴與你的代碼。

$(document).ready(function() { 

    $('#yes').on('click', function() { 

     $('#change').text('Come on!'); 

    }); 
}); 

如果這是不可能的,你我還有一個建議,因爲別人已經在給定的情況下$(this)提到了你的問題。 我想推薦你更換.live()與.on()因爲.live()被棄用的jQuery V1.7和1.9

編輯

我還設置了一個fiddle其中#移除yes和#change已被更改爲類。在這個小提琴你有2 <li>標籤和「加油!」文本被插入右邊的<p class"change">

+0

+1取代生活。是未來的標準! – jmort253 2013-04-28 20:51:27

+0

您可能想指出,如果有多個標題,則標識將不起作用。他爲選項使用id =「yes」和id =「no」這一事實表明,頁面上最終可能存在其他人,在這種情況下,對於存在多個具有相同值的id的情況,getElementById的行爲,根據規格未定義。 – jmort253 2013-04-28 20:56:29

+0

頁面上有多個標題。 – ilija 2013-04-28 21:00:09

3

裏面你阿賈克斯成功this背景下將是阿賈克斯,而不是實際的DOM元素,所以你可以使用$.proxy在裏面的元素的上下文來傳遞你的阿賈克斯呼籲。另一件事是live已被棄用,你可以使用on()委託事件處理程序。

Sample Fiddle

$(this).find(".caption").find("#yes").on('click', function() { 
      $.ajax({ 
        url: 'prob.php', 
        data: {action: 'yes'}, 
        type: 'post', 
        success:$.proxy(function (response) { 
          $(this).find(".caption").find("#change").text("Come on!"); 
         },this), 
        error:$.proxy(function() 
        { 
         // 
        }, this) 
       }) 
});