2011-09-25 110 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