1

如何用新的内容替换ap的当前内容?我目前的解决方案不起作用。响应回来了,所以如果我在 function(response) {} 中放一个 alert("Something") 它就可以了。内容没有被替换,那就是什么都没有发生!

             $(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>
4

2 回答 2

6

你真的需要遍历 DOM 树吗?因为您需要的两个元素都有一个(希望是)唯一 ID,这意味着您可以直接访问它们。

是一个简化的 js fiddle 与您的代码。

$(document).ready(function () {

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

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

    });
});

如果这对您来说不可能,我还有另一个建议,因为其他人已经$(this)在给定的上下文中提到了您的问题。我想建议您将 .live() 替换为.on()因为.live()从 jQuery v1.7 开始已被弃用,并在 1.9 中被删除

编辑

我还设置了一个小提琴,其中 #yes 和 #change 已更改为类。在这个小提琴中,您有 2 个<li>标签和“来吧!” 文本被插入到右边<p class"change">

于 2013-04-28T20:46:45.073 回答
3

在您的 ajax 成功this上下文中将是 ajax 而不是实际的 DOM 元素,因此您可以使用$.proxy在 ajax 调用中传递元素的上下文。另一件事是live已弃用,您可以将on()用于委托事件处理程序。

样品小提琴

   $(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)
                })
 });
于 2013-04-28T20:40:50.243 回答