如何用新的内容替换p的当前内容?我目前的解决方案不起作用。如果我在函数(响应){}中放置一个警报(“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>
答案 0 :(得分:4)
你真的需要遍历DOM树吗?因为您需要的两个元素都有(希望)唯一ID,这意味着您可以直接访问它们。
Here是一个简化的js代码。
$(document).ready(function () {
$('#yes').on('click', function () {
$('#change').text('Come on!');
});
});
如果您无法做到这一点,我还有其他建议,因为其他人已经在给定的上下文中提到了$(this)
的问题。
我建议您将.live()替换为.on(),因为从{jQuery v1.7开始不推荐使用.live()并在1.9中删除了
修改强>
我还设置了fiddle,其中#yes和#change已更改为类。在这个小提琴中你有2个<li>
标签和“加油!”文本将插入右侧<p class"change">
。
答案 1 :(得分:3)
在你内部,ajax success 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)
})
});