我遇到了在我的代码中定位正确元素的问题。我的页面上有一个缩略图列表,当您点击“我不喜欢这个”图标时,目标视频会更改为另一个。
这是HTML
<li class="videoBox recommended">
<div class="spacer" style="display: block;"></div>
<div class="features">
<div>
<a class="dislike_black" title="I dislike this" onclick="ThumbsDown(30835, 'relevance', '1');"></a>
</div>
</div>
<a href="...">
<h1>...</h1>
<div class="information">...</div>
</li>
Ajax是:
function ThumbsDown(id,sort,page) {
$.ajax({
url: "/change/videos/"+id+"/thumbsdown/",
type: "POST",
data: {
"sort": sort?sort:"",
"page": page?page:""
},
success: function(data) {
//$("#content .videoList ul li.videoBox").html(data); // THIS IS WORKING, but replaces ALL the divs
$(this).parent("li.videoBox").html(data); // Cant get this to work!
}
});
我做错了什么?甚至$(this).css(“border”,“1px solid red”)也没有“正常工作”。 (我尝试了背景颜色和颜色)我什么也看不见。
$(这个)指的是调用函数的“a”标签吗?所以我正在寻找他的父母名为videobox ...帮助?
我可以定位
答案 0 :(得分:2)
你不应该使用onclick
,你应该将它绑定到一个事件,特别是如果用户没有ajax,你很容易使它降级。
将您的<a>
代码更改为:
<a href="/change/videos/1/thumbsdown/"
data-sort="sort"
data-page="page"
class="dislike_black"
title="I dislike this"></a>
jQuery事件:
$('.dislike_black').click(function(e) {
e.preventDefault(); // Prevent link from clicking
var $aTag = $(this); // I use $aTag to denote a jq object
$.ajax({
url: $aTag.attr('href'),
type: "POST",
data: {
"sort": $aTag.data('sort'), // data-sort attr value
"page": $aTag.data('page') // data-page attr value
},
success: function(response) {
$aTag.closest(".videoBox").html(response);
}
});
});
现在它没有javascript工作,你没有使用讨厌的onclick!未经测试/无保修。
答案 1 :(得分:2)
几乎。为了完成这项工作,您需要将context
传递给.ajax()
来电。
像
$.ajax({
url: "/change/videos/"+id+"/thumbsdown/",
type: "POST",
context: document.body, // for instance
data: {
"sort": sort?sort:"",
"page": page?page:""
},
success: function(data) {
//$("#content .videoList ul li.videoBox").html(data); // THIS IS WORKING, but replaces ALL the divs
$(this).parent("li.videoBox").html(data); // Cant get this to work!
}
});
上述代码会导致所有ajax处理程序都this
指向document.body
。因此,您需要将document.body
替换为您要查找的元素。所以,如果你以某种click handler
调用你的函数,你可以调用context: this
并完成魔法。
有关详细信息,请参阅jQuery Ajax Doc部分“上下文”。
答案 2 :(得分:0)
我相信您需要更改原始代码的所有内容是在成功函数之外引用this
,如下所示:
function ThumbsDown(id,sort,page) {
var self = this
$.ajax({
url: "/change/videos/"+id+"/thumbsdown/",
type: "POST",
data: {
"sort": sort?sort:"",
"page": page?page:""
},
success: function(data) {
//$("#content .videoList ul li.videoBox").html(data); // THIS IS WORKING, but replaces ALL the divs
$(self).parent("li.videoBox").html(data); // Cant get this to work!
}
});