jQuery / Ajax变量混乱

时间:2009-11-03 13:55:28

标签: jquery ajax

你能告诉我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;
});
});

4 个答案:

答案 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属性。

希望有所帮助。