jQuery - 禁用特定td的实时点击事件

时间:2011-10-13 09:32:01

标签: jquery

我有一个表,我通过.live()将click事件分配给每一行中的每个td(id =“min”)

查看:

            <td id="min">
                @Html.Action("GetMinAmount", "Stock", new { id = item.FoodID })
            </td>      

控制器(显示图像或数量)

     // Function to return min amount, if null return "-"
    public string GetMinAmount(int id)
    {
        var food = dbEntities.FOODs.Single(f => f.FoodID == id);
        string output = "";
        if (food.MinAmount == null)
        {
            output += "<img id=\"disable\" src=\"../../Content/Add_in_Images/disable.png\" alt=\"disable\" style=\"background-image: none\"/>";
        }
        else
        {
            return food.MinAmount.ToString();
        }
        return output;
    }

脚本:

       $('#min').live('click', function () { $editdialog.dialog('open'); });

但是在td中我可以有两个条件,一个是“启用”状态,它显示用户可以点击并编辑金额的金额。如果金额为空,将显示一个图标,用户无法对其执行任何操作。

目前我无法删除已停用图片的点击处理程序。因此,即使是假定被禁用的td也可以点击...

我不知道如何才能删除“禁用”td的点击处理程序。

任何人都可以帮忙???感谢.......

5 个答案:

答案 0 :(得分:5)

在实时点击事件后添加此内容

$("img#disable").parents("td").die("click");

答案 1 :(得分:2)

你可以尝试这样的事情:

$('td').live('click', function (e){
    if($(this).hasClass('disabled'))
        {
            e.prefentDefault();
            e.stopPropagation();
        }
    // do your stuff here
});

答案 2 :(得分:0)

我会以某种方式改变我的控制器,以一种“肮脏”的方式来做它?

 // Function to return min amount, if null return "-"
    public string GetMinAmount(int id)
    {
        var food = dbEntities.FOODs.Single(f => f.FoodID == id);
        string output = "";
        if (food.MinAmount == null)
        {
            output += "<img class=\"disable\" src=\"../../Content/Add_in_Images/disable.png\" alt=\"disable\" style=\"background-image: none\"/>";
        }
        else
        {
            output += "<h4 class=\"edit\">" + food.MinAmount + "</h4>";
        }
        return output;
    }

只需将我的金额放入包装器中,然后将点击事件分配给仅包含金额的td ...

   $('.edit').live('click', function () {

有关此问题的任何建议吗?

感谢所有反馈......谢谢......

答案 3 :(得分:0)

使用.removeAttr()删除内联onclick事件处理程序无法在Internet Explorer 6,7或8中实现所需效果。为避免潜在问题,请改为使用.prop():

$("#MyTd").prop("onclick", null); 

答案 4 :(得分:0)

在我的情况下,e.stopImmediatePropagation()做了伎俩

$('.edit').live('click', function (e) {
   e.stopImmediatePropagation();
});