2011-09-25 112 views
3

我有这个功能是假设改变跨度的html。它第一次运作,但任何点击后它都不会改变任何东西。我知道查询正在工作,因为数据库正在更新。这是代码。jquery函数只能工作一次?

$('#availabilityicon').click(function() { 
    $.ajax({ 
      type: "GET", 
      url: "includes/changeavailability.php", 
      success: function(msg) { 
        if(msg === "available") { 
          var vailspan = $('span#avail').html('<a id="availabilityicon" href="#"><img align="center" width="16px" height="16px" src="images/available.png" /></a>'); 
        } 
        else if(msg === "unavailable") { 
          var availspan = $('span#avail').html('<a id="availabilityicon" href="#"><img align="center" width="16px" height="16px" src="images/unavailable.png" /></a>'); 
        } 
      } 
    }); 
}); 

这里是PHP代码

<?php 
session_start(); 
$user = $_SESSION['username']; 
include("dbcon.php"); 
$result = mysql_query("SELECT availability FROM user WHERE username='$user' ORDER BY id DESC") or die(mysql_error()); 
$row = mysql_fetch_assoc($result); 
$availability = $row['availability']; 
if($availability == 'yes') { 
$query = mysql_query("UPDATE user SET availability='no' WHERE username='$user'") or die(mysql_error()); 
echo "unavailable"; 
} 
elseif($availability == 'no' or $availability == "") { 
$query = mysql_query("UPDATE user SET availability='yes' WHERE username='$user'") or die(mysql_error()); 
echo "available"; 
} 
mysql_close($con); 
?> 

回答

3

有一个在你的JavaScript中的拼写错误,你已经把vailspan,你可能是指把availspanif(msg === "available") {行之后。

如果它不是,请尝试更改click事件到live之一:

$('#availabilityicon').live('click', function() { 

以防万一JavaScript是覆盖了#availabilityicon icon元素和失败事件重新连接到新的

+0

'拼写错误'并不重要 - 该var只是设置为jQuery选择器的结果,因此它将成为跨度。但是,当你指出他将元素替换为另一个具有相同标识的元素时,就明白了。 +1 –

+0

萤火虫在参数列表后面说“Missing”。“在这个变化之后 – vacarsu

+0

你已经添加了一个额外的开头'(''''在'function'之前......删除它并且它会工作 – Clive

2

您单击的“可用图标”将被替换为具有相同名称的另一图标。你可以尝试使用.live()或者你可以阅读事件委托。

+0

我改变了$('#availabilityicon')。click(function(){to $(' (“click”,(function(){但是现在firebug在参数列表后面说“Missing”)。“我以前从来没有用过.live,所以我几乎忘记了一些东西。 – vacarsu