2009-11-03 32 views
0

你能告诉我这将是ID之间的区别:的jQuery /阿贾克斯可变混乱

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

你有哪些代码? “this”下面是什么? – 2009-11-03 14:02:47

+0

你能向我们展示具有“投票”类的元素的html吗? – 2009-11-03 14:20:17

+0

谢谢,我知道了。 – krasenslavov 2009-11-03 14:24:01

回答

0

如果它不工作就意味着功能没有运行INT正确的上下文和$(本)不会做你认为是因为有不同的含义。


事实上,看代码更难,我没有看到这个如何也可能会被任何DOM元素的范围都没有。回调函数可能在JQuery对象的上下文中运行,或者类似的东西。

+0

感谢您的帮助,您是对的,这是修复,这是一个丑陋的,但它现在工作。 成功:function(result){ var output = result.split(“,”) $('span#rating-'+ output [0])。html(output [1]); } – krasenslavov 2009-11-03 14:23:08

0

我的猜测是,你正在检查的元素的name属性不为1,但很难说没有问题的标记。

0

需要更多信息,但明显的解释是this没有在初始化id时定义(或者没有用你的想法定义)。无论是那个还是那个name属性都不是你所期望的。

0

在你的问题,你已经指出:

var id = $(this).attr("name"); 
var id = 1; 

但是在你完整的代码使用的是:

var id = $(this).attr("id"); 
var name = $(this).attr("name"); 

的完整代码“应该”的工作,因为你没有你的ID和名称属性混淆在一起。

如果它不起作用,很可能您使用的.vote元素没有ID。从代码的外观来看,也许你真的渴望.vote元素父代的id?然而,没有提供额外的标记没有办法告诉。

要获得.vote元素的父ID这将是:

var $vote = $(this); 
var $parent = $vote.parent(); 
var id = $parent.attr("id"); 
var name = $vote.attr("name"); 
var dataString = 'id='+ id ; 

注意如何我也没有继续使用$(本)和而存储在一个变量返回的对象。这要快得多,因为我们不必再让jQuery再次找到元素。

它可能无法正常工作的另一个原因是,如果你真的想要你的投票按钮的ID。那么它不会工作,因为ids可能不会被复制。例如,您必须将两个投票按钮之间的id重命名为“vote-up-1”和“vote-down-1”。或者,只需将id粘贴到“title”属性中,并将其用于帖子的id而不是id属性。

希望有所帮助。