2013-10-09 169 views
0

我想做一个座位图。所有座位都是元素。我点击第一个座位,之后我点击另一个座位。第二个改变了颜色,但第一个不工作。为什么?第一次点击不工作在jquery

function seatObject(id, label, status, token){ 
    this.id = id; 
    this.label = label; 
    this.status = status; 
    this.token = token; 
} 

var seats = []; 
var currentSeat; 

function initAll() { 
    $(".seatObj").each(function() { 
     var id = $(this).attr("id"); 
     var temp = new seatObject("#" + id, "label" + id, "available", ""); 
     seats[id] = temp;   
     $("#" + id).click(function() { 
      currentSeat = $(this).attr("id"); 
      if (seats[currentSeat].status == "selected") 
      { 
       dequeueSeat(); 
      } 
      else 
      { 
       enqueueSeat(); 
       //alert($(this).attr("inkscape:label"));      
      } 
     }); 
    }); 
} 
+2

是什么标记是什么样子?在调用此函数什么时候?当你分配这些点击事件?是否在第一次尝试时调用了click事件函数,但是没有通过'if'条件?有很多调试你可以在这里进行调整以缩小这个范围。 – David

+0

请发布[JSFiddle](http:// ('。clickObj')。on('click',function(e){console.log($(e。jsfiddle.net))包含您的HTML。 – Bucket

+0

您的点击事件可以设置得好像这样: $('。seatObj')。 .target),'cl ' } ...不知道如果它修复你的东西,虽然 – andygoestohollywood

回答

0

与您的代码的家伙没问题......

你需要变化不大...

普通点击不附加一个事件处理函数的一个或多个事件。因此,请使用on方法 - 将一个或多个事件的事件处理函数附加到所选元素。

$(".seatObj").on('click',"#" + id, function() { 
     currentSeat = $(this).attr("id"); 
     if (seats[currentSeat].status == "selected") 
     { 
      dequeueSeat(); 
     } 
     else 
     { 
      enqueueSeat(); 
      //alert($(this).attr("inkscape:label"));      
     } 
}); 

您可以使用类,而不是ID在on方法。

+0

“一个或多个事件”意味着什么?显然,只能将1个处理程序附加到一个事件,但是您可以将同一个处理程序附加到多个对象。 – Nunners

0

尝试在包装$(文件)的功能。就绪(函数(){}

为我工作。

相关问题