2016-01-24 262 views
0

我正在使用jqgrid使用multiselect選項。有兩個不同的功能,我必須執行。jQgrid:禁用複選框單擊並僅在複選框被單擊時選中複選框

功能1: 我必須禁用檢查複選框取決於某些條件。爲此,我在beforrowselect事件中使用下面的代碼塊。

beforeSelectRow: function(rowid, e) { 
    if($("#jqg_TableId_"+rowid).attr("disabled")){ 
     return false; 
    } 
    return true; 
} 

該功能在這段代碼中正常工作。

功能2:但問題是,當我點擊行中的任何地方,複選框被選中,但複選框值沒有出來正確。當我在複選框區域內點擊時,複選框的值是準確的。爲此,我想限制用戶點擊複選框區域以點擊複選框。爲此,我使用下面提到的代碼塊。

beforeSelectRow: function(rowid, e) { 
    return $(e.target).is('input[type=checkbox]'); 
}, 

如果我單獨使用任何一個塊,那麼它的工作正常的功能。 我需要實現這兩個功能,但都返回值。這兩種情況都不可能返回值。請幫助我如何實現這兩個功能。

下面是我必須實現的完整代碼。

beforeSelectRow: function(rowid, e) { 
    if($("#jqg_TableId_"+rowid).attr("disabled")){ 
     return false; 
    } 
    return true; 
} 
return $(e.target).is('input[type=checkbox]'); 
}, 

回答

0

在每一個問題的jqGrid其中的和版本從叉(free jqGridGuriddo jqGrid JS或舊的jqGrid版本< = 4.7)使用包括這一點很重要。我想你描述的問題存在,因爲你使用一些舊版本的jqGrid。

演示https://jsfiddle.net/OlegKi/4ga1ekh3/3/使用免費的jqGrid 4.12.1(這是jqGrid的的叉子,我開發出更多的爲一年)和下面的代碼

beforeSelectRow: function (rowid, e) { 
    var item = $(this).jqGrid("getLocalRow", rowid); 
    if (item.closed) { 
     return false; 
    } 
    return true; 
} 

否認具有closed: true財產的行選擇。點擊該行上的任意位置,就像點擊複選框一樣。

我會建議你考慮使用另一種方式,我在the answer中描述過。它只設置

rowattr: function (rd) { 
    if (rd.closed) { 
     return { 
      "class": "ui-state-disabled ui-jqgrid-disablePointerEvents" 
     }; 
    } 
} 

查看另一個演示https://jsfiddle.net/OlegKi/4ga1ekh3/4/。它在「關閉」行上設置禁用類,以防止在單擊選擇列的列標題(選擇全部功能)時選擇該行。

+0

beforeSelectRow中用於禁用複選框選擇的塊按預期工作,但rowattr事件不按照需求工作。整個行在返回「class」時禁用:「ui-state-disabled ui-jqgrid-disablePointerEvents」。只需點擊複選框區域即可檢查複選框。 – user2992704

+0

@ user2992704:是的,這是我的預期。設置行禁用可以一次完成兩件事:向用戶顯示哪些行不能被選擇2)通過選擇所有行來解決問題。我們可以使用其他一些預定義的類:'ui-subgrid','jqgroup'或'jqfoot'。見https://jsfiddle.net/OlegKi/4ga1ekh3/5/-一個**必須結合**'rowattr'和'beforeSelectRow'。 – Oleg

相關問題