jQuery函数只能执行一次吗?

3

我有这个函数,它应该改变一个标签的HTML内容。第一次使用时它能够正常工作,但是之后的任何点击都不会改变任何东西。我知道查询是有效的,因为数据库正在更新。下面是代码:

$('#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);
?>
2个回答

3

你的javascript中有一个拼写错误,你在if(msg === "available") {行后面放置了vailspan,但你可能想放置的是availspan

如果不是这个问题,请尝试将click事件更改为live事件:

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

万一您的JavaScript正在覆盖#availabilityicon图标元素并未能重新附加事件到新元素,请注意


“拼写错误”一点也不重要——那个变量只是被设置为 jQuery 选择器的结果,所以它将是 span。但当你指出他用具有相同 ID 的另一个元素替换该元素时,你就得到了它。+1 - no.good.at.coding
Firebug在修改后提示“参数列表后缺少)” - vacarsu
你在 function 前面多加了一个开括号 ( ... 把它删掉就可以了。 - Clive

2

您点击的"availabiltyicon"将被替换为另一个同名的图标。您可以尝试使用.live()方法,或者了解事件委托的相关知识。


我将 $('#availabilityicon').click(function() { 改为了 $('#availabilityicon').live("click",(function() { 但现在 Firebug 报错 "Missing ) after argument list." 我以前从未使用过 .live,所以可能忘记了某些东西。 - vacarsu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接