2013-02-19 133 views
1

我正在使用表單編輯。我希望根據下拉框中的選擇禁用添加和編輯表單中的某些字段。什麼事件最適合用來觸發此事件?我一直在使用dataEvents嘗試:使用選擇框動態更改列的可編輯屬性

{ name:'type_cd', 
    edittype:'select', 
    editoptions:{ 
     dataUrl:'functions.php', 
      dataEvents:[{ 
       type:'change', 
       fn: function(e){ 
        $(this).setColProp('cntrct_id',{ 
         editoptions:{editable:false} 
        }); 
      } 
     }]       
    } 
}, 

這對我的表單字段沒有明顯的效果,但我知道,它被達到,因爲我可以從它那裏得到一個警告消息,如果我把一個在

。編輯

如果我提交表單,下次打開它時,設置爲editable:false的列將不會出現。這是朝着正確的方向邁出的一步,但我希望它能立即是不可修改的。說真的,我想它是可見的,但被禁用(即禁用:真)

回答

4

所有dataEvents首先允許您在編輯元素的元素註冊回調。回調內部this將被初始化爲將被綁定的DOM元素。所以$(this)裏面的change處理程序它將包裝在<select>元素上,而不是在網格上。 $(this).setColProp的使用將不正確。

要添加/編輯表格禁用某些輸入字段,你可以使用一個事實,即所有投入要素獲得相同的idname財產上的相應列colModel值。所以,如果你需要禁用的cntrct_id輸入,您可以在元素上設置disabled屬性trueid="cntrct_id"

{ 
    name: 'type_cd', 
    edittype: 'select', 
    editoptions: { 
     dataUrl: 'functions.php', 
     dataEvents: [{ 
      type: 'change', 
      fn: function (e) { 
       // disable input/select field for column 'cntrct_id' 
       // in the edit form 
       $("#cntrct_id").prop("disabled", true); 
      } 
     }]       
    } 
} 

明白editoptions將被用於任何現有的編輯模式(表單編輯,在線編輯和細胞是非常重要的編輯)。如果要編寫支持所有編輯模式的代碼dataEvents,則必須檢測編輯模式並使用其他編輯字段的編號。代碼(未經測試)可以如下

{ 
    name: 'type_cd', 
    edittype: 'select', 
    editoptions: { 
     dataUrl: 'functions.php', 
     dataEvents: [{ 
      type: 'change', 
      fn: function (e) { 
       var $this = $(e.target), $td, rowid; 
       // disable input/select field for column 'cntrct_id' 
       if ($this.hasClass("FormElement")) { 
        // form editing 
        $("#cntrct_id").prop("disabled", true); 
       } else { 
        $td = $this.closest("td"); 
        if ($td.hasClass("edit-cell") { 
         // cell editing 
         // we don't need to disable $("#cntrct_id") 
         // because ONLY ONE CELL are edited in cell editing mode 
        } else { 
         // inline editing 
         rowid = $td.closest("tr.jqgrow").attr("id"); 
         if (rowid) { 
          $("#" + $.jgrid.jqID(rowid) + "_cntrct_id") 
           .prop("disabled", true); 
         } 
        } 
       } 
      } 
     }]       
    } 
} 

最後一句話。如果你仍然使用舊版本的jQuery(在jQuery 1.6之前),它不支持prop方法,你必須改用attr

+2

關於你的答案,奧列格的偉大之處在於你不只是告訴解決方案,你解釋了它的理論。你真棒。 – user 2013-02-19 19:07:36

+1

@MattWall:不客氣!我很高興你喜歡我的問題回答我的風格。我認爲,*解決問題本身就更加重要。 – Oleg 2013-02-19 19:25:19

+1

我也很喜歡Oleg的回答方式,當我開始使用jqgrid時,我從Oleg的答案中得到了大部分jqgrid相關問題的解決方案。謝謝Oleg – Kris 2013-02-20 03:32:59

-1

@Oleg:這是工作(可以獲得警報消息),但它不禁用該字段。 表單字段是否需要特殊值?

+0

這不是一個答案。嘗試對網站做出貢獻,這會給你足夠的聲望評論其他人的答案。 – Tyler 2013-11-13 18:24:26

+0

@Pravish Jayasundar,更棒的是,問一個新問題 – user 2013-11-13 21:08:48

+0

我無法對上述問題添加評論,所以我不得不張貼爲答案 – 2013-11-14 09:27:59