2010-02-03 67 views
0

林創建與郵件收件箱狀UI一個簡單的信息系統。我有一個選擇框,可以控制每個消息的複選框一個列表。它工作正常,但我需要更少的代碼行。更好的AJAX切換性能複選框ATTR與選擇更改

繼承人我的代碼:

jQuery("#select_deselect").change(function(){ 
    switch (jQuery(this).val()){ 
    case 'unread': 
    jQuery("input[class=new_message]").each(function(){ 
    jQuery(this).attr("checked", "checked"); 
    }); 
    jQuery("input[class=message]").each(function(){ 
    jQuery(this).removeAttr("checked"); 
    }); 
    break; 
    case 'read': 
    jQuery("input[class=message]").each(function(){ 
    jQuery(this).attr("checked", "checked"); 
    }); 
    jQuery("input[class=new_message]").each(function(){ 
    jQuery(this).removeAttr("checked"); 
    }); 
    break; 
    case 'all': 
    jQuery("input[class=new_message]").each(function(){ 
    jQuery(this).attr("checked", "checked"); 
    }); 
    jQuery("input[class=message]").each(function(){ 
    jQuery(this).attr("checked", "checked"); 
    }); 
    break; 
    case 'none': 
    jQuery("input[class=new_message]").each(function(){ 
    jQuery(this).removeAttr("checked"); 
    }); 
    jQuery("input[class=message]").each(function(){ 
    jQuery(this).removeAttr("checked"); 
    }); 
    break; 
    default: 
    jQuery("input[class=new_message]").each(function(){ 
    jQuery(this).removeAttr("checked"); 
    }); 
    jQuery("input[class=message]").each(function(){ 
    jQuery(this).removeAttr("checked"); 
    }); 
    } 
}); 

select_deselect是我的選擇框的選項(空,所有的讀,未讀,無)的ID。

new_message是asignesd到的未讀消息的類

消息)asigned讀取消息

我認爲一個肘節(類可以DOIT但是這將是相同的路線。

任何想法,你選擇它們之後你可以在上面打電話給你.attr()或.removeAttr()來得到這個簡稱爲更多鈔票

回答

2

無需環路中的每個元素。

jQuery("#select_deselect").change(function(){ 
    var newmessage = jQuery("input[class=new_message]"); 
    var message = jQuery("input[class=message]"); 
    switch (jQuery(this).val()){ 
     case 'unread': 
      newmessage.attr("checked", "checked"); 
      message.removeAttr("checked"); 
     break; 
     case 'read': 
      message.attr("checked", "checked"); 
      newmessage.removeAttr("checked"); 
     break; 
     case 'all': 
      newmessage.attr("checked", "checked"); 
      message.attr("checked", "checked"); 
     break; 
     case 'none': 
     default: 
      newmessage.removeAttr("checked"); 
      message.removeAttr("checked"); 
    } 
}); 
+0

+1來緩存查詢。 – 2010-02-03 20:55:39

+0

只有緩存它們每變化事件,但如果你做任何事情,不只是更改此功能 – PetersenDidIt 2010-02-03 20:57:22

+0

感謝petersendidit – kraiosis 2010-02-04 15:16:44

0
jQuery("#select_deselect").change(function(){ 
    switch (jQuery(this).val()){ 
    case 'unread': 
    jQuery("input[class=new_message]").attr("checked", "checked"); 
    jQuery("input[class=message]").removeAttr("checked"); 
    break; 
    case 'read': 
    jQuery("input[class=message]").attr("checked", "checked"); 
    jQuery("input[class=new_message]").removeAttr("checked"); 
    break; 
    case 'all': 
    jQuery("input[class=message],input[class=new_message]").attr("checked", "checked"); 
    break; 
    case 'none': 
    default: 
    jQuery("input[class=message],input[class=new_message]").removeAttr("checked"); 
    break; 
    } 
}); 

我通過除去冗餘的每個,以及用於所有和無結合選擇簡化以上。

+0

作爲一個小的優化選中的值會有所幫助,我會使用一個局部變量來存儲所有的輸入,以提高每個速度案例。 – 2010-02-03 20:59:58

+0

正確BGY ..凱爾..它有點與優化,但由於速度較慢病保持它的其他活動。 – kraiosis 2010-02-04 15:15:58