你能告诉我ID之间的区别是什么:
var id = $(this).attr("name");
var id = 1;
问题在于,当我使用第一个变量示例时,不要工作
$.ajax({
type: "POST",
url: "http://localhost/",
data: dataString,
cache: false,
success: function(rating) {
$("span#rating-" + id).html(rating);
}
});
和第二个例子一起工作没问题。
好的,这将是完整的功能代码:
$(function() {
$(".vote").click(function() {
var id = $(this).attr("id");
var name = $(this).attr("name");
var dataString = 'id='+ id ;
var parent = $(this);
// var id = 1;
if (name=='up') {
$.ajax({
type: "POST",
url: "vote.php?type=up",
data: dataString,
cache: false,
success: function(rating) {
$('span#rating-' + id).html(rating);
}
});
}
else {
$.ajax({
type: "POST",
url: "vote.php?type=down",
data: dataString,
cache: false,
success: function(rating) {
$('span#rating-' + id).html(rating);
}
});
}
return false;
});
});
答案 0 :(得分:0)
我的猜测是你正在检查的元素的name属性不是1,但如果没有相关的标记就很难判断。
答案 1 :(得分:0)
需要更多信息,但明显的解释是this
在初始化id
时未定义(或未定义您的想法)。该名称或名称属性不是您所期望的。
答案 2 :(得分:0)
如果它不起作用,则意味着该函数没有在正确的上下文中运行,并且 $(this)没有按照您的想法运行,因为 this 不同的意思。
事实上,在代码中更加努力,我看不出这个可能在任何DOM元素的范围内。回调函数可能在JQuery对象的上下文中运行。
答案 3 :(得分:0)
在您的问题中,您已声明:
var id = $(this).attr("name");
var id = 1;
但是在您使用的完整代码中:
var id = $(this).attr("id");
var name = $(this).attr("name");
完整代码“应该”有效,因为您没有将您的ID和名称属性混淆。
如果它不起作用,您使用的.vote元素可能没有id。从代码的外观来看,也许你真的希望.vote元素的id为parent?但是,如果不提供额外的标记,就无法分辨。
要获取.vote元素的父ID,它将是:
var $vote = $(this);
var $parent = $vote.parent();
var id = $parent.attr("id");
var name = $vote.attr("name");
var dataString = 'id='+ id ;
注意我也不会继续使用$(this)而是将返回的对象存储在变量中。这要快得多,因为我们不必再让jQuery再次找到该元素。
它可能无效的另一个原因是,如果你确实想要你的投票按钮的id。然后它不会工作只是因为ID可能不会重复。例如,您必须将两个投票按钮之间的ID重命名为“vote-up-1”和“vote-down-1”。或者更确切地说,只需将id粘贴在“title”属性中,并将其用于帖子的id而不是id属性。
希望有所帮助。