2010-10-27 77 views
0

我正在使用以下脚本将<tr>从表中的任意位置移动到该表的顶部。这发生在ajax表单提交后。该form's - 而不是button's - 类是“顶级”如何使用jQuery禁用/启用多个按钮

$(".top").click(function() { 
    var thisRow = $(this).parent().parent(); 
    var firstRow = thisRow.parent().find("tr:first").not(thisRow); 
    thisRow.insertBefore(firstRow); 
}); 

一旦物品到达表的顶部,我想禁用Send Item To Top按钮。因为在每个<tr>另外两个按钮的问题变得复杂:Move Item Up By OneMove Item Down By One(包括AJAX,太)

一旦<tr>移动到顶部,我想与Send Item To Top按钮沿禁用Move Item Up By One。另外,我想在单击Move Item Down By One时重新启用它们。

下面的脚本被用于交换<tr>的上/下移动位置。

注:我不能指定任何我的按钮的id或类,因为他们的形式是动态生成的。我只能将表单分配给一个ID或一个类。

// Move item down/up 
$(".up,.down").click(function(){ 
    var row = $(this).parents("tr:first"); 
    if ($(this).is(".up")) { 
     row.insertBefore(row.prev()); 
    } else { 
     row.insertAfter(row.next()); 
    } 
}); 

下面是HTML:

<tr id="item_168" class="element168"> 
    <td><form action=".." class="top..." method="post" onsubmit="..."><input onclick="" type="submit" value="&uarr;" /></form></td> 
    <td class="action"><form action="up..." class="up" method="post" onsubmit="..."><input onclick="" type="submit" value="&uarr;" /></form></td> 
    <td class="action"><form action="down..." class="down" method="post" onsubmit="..." title="Move one"><input onclick="" type="submit" value="&darr;" /></form></td> 
</tr> 
+0

请给你的浏览器解释HTML结构以及 – 2010-10-27 12:40:20

回答

1

我是很新的jQuery的,但你可以做

$(row).find('.up,.top').find('input[type=submit]').attr('disabled', 'disabled') 
+0

如果你拿出'[type = button]',那么它就可以工作......谢谢,我在两种情况下完成了这项工作......将项目移动到顶端,然后将其向下移动。当“移动项目”按钮到达顶端时,我可以尝试找出如何去做......请编辑您的答案以反映[type = input]部分,以便我可以接受它。 – Mohamad 2010-10-27 13:08:14

+0

如果可能的话,我宁愿编辑它,以便类型正确...您可以向我展示其中一个按钮的HTML吗? – Chowlett 2010-10-27 13:43:15

+0

克里斯,当然,我猜这个类型只需要提交而不是按钮...

Mohamad 2010-10-27 13:47:41

0

给你的按钮类或ID,并使用这些挂钩启用/禁用/隐藏按钮

+0

莫因,它不是一个选项,因为表单是通过我的框架API动态生成的,我只能将类应用到表单。 – Mohamad 2010-10-27 12:37:55

+0

此外,我甚至不知道代码会在我的例子中出现在哪里。 – Mohamad 2010-10-27 12:40:20

1

这里的事件处理程序分为两(为了便于阅读):

$('#yourTableID').delegate('.up', 'click', function() { 
    var row = $(this).closest('tr'); 
    var index = row.index(); 

    if(index != 0) { 
    row.insertBefore(row.prev()); 

    if(index == 1) { 
     $(this).attr('disabled', 'disabled'); 
    } 
    } 

}) 
.delegate('.down', 'click', function() { 
    var row = $(this).closest('tr'); 
    var index = row.index(); 

    if(index < row.siblings().length) { 
    row.insertAfter(row.next()); 

    if(index + 1 == row.siblings().length) { 
     $(this).attr('disabled', 'disabled'); 
    } 
    } 

}); 

编辑︰改变row.insertAfter(row.prev ())到row.insertAfter(row.next())。糟糕!

而且,这里的小提琴,以检查它在行动:http://jsfiddle.net/pn3MN/

+0

谢谢约翰,但是一旦他们被禁用,按钮将保持禁用状态。向下移动不会重新启用它们。此外,还有移动项目的其他按钮顶部:/ – Mohamad 2010-10-27 12:50:38

+0

是的,我开始玩弄小提琴,注意到我没有做完整的圈子。但是谁来为整个解决方案做好准备? :)希望这有助于这个概念,并且你不希望得到答案:p – 2010-10-27 12:53:59

+0

哈哈!像我这样的业余爱好者会这样做:D ......但上述的一条线路解决方案很有效。大部分。还有一个MOD,它已经完成了。不过感谢您的帮助! – Mohamad 2010-10-27 13:10:28