2014-09-23 95 views
0

當我在內聯編輯期間更改特定列的值時,我想要動態更改同一行另一列的可編輯屬性值。下面是我的代碼的一部分:jqgrid內嵌編輯:動態設置可正確編輯另一列的列

{ name: "admin", width:250, editable:<?php echo $owner; ?>, edittype:"custom", editoptions: { 
      custom_element: myelem, 
      custom_value:myvalue, 
      dataEvents: [{ 
        type: 'change', 
        fn: function (e) { 
         var $this = $(e.target), $td, rowid; 
         var radSel = $(e.target).val(); //alert(radSel); 
         if(radSel == "No"){ 
          if ($this.hasClass("FormElement")) { 
           $("#request").prop("editable", true); 
          } else { 
           //alert("you are here!!"); 
           var row = $this.closest('tr.jqgrow'); 
           var rowId = row.attr('id'); //alert(rowId); 
           $("#" + rowId + '_request').prop("editable", true); 
          } 
         } 
        } 
      }] 

    }}, 
{ name: "request", width: 100}, 
...... 

function myelem (value, options) { 
var radio1 = document.createElement('input'); 
radio1.id = 'radY'; 
radio1.type = 'radio'; 
radio1.name = 'appr'; 
radio1.value = 'Yes'; 
if(value.match(/^Yes.*/)){ radio1.checked = true; } 

var radio2 = document.createElement('input'); 
radio2.id = 'radN'; 
radio2.type = 'radio'; 
radio2.name = 'appr'; 
radio2.value = 'No'; 
if(value.match(/^No.*/)){ radio2.checked = true; } 

var label1 = document.createElement('label'); 
label1.setAttribute('for', radio1.id); 
label1.innerHTML = 'Yes'; 

var label2 = document.createElement('label'); 
label2.setAttribute('for', radio2.id); 
label2.innerHTML = 'No'; 

var container = document.createElement('div'); 
container.appendChild(radio1); 
container.appendChild(label1); 
container.appendChild(radio2); 
container.appendChild(label2); 

return container; 
} 

function myvalue(elem, operation, value) { 
    if(document.getElementById('radY').checked) {return "Yes";} 
    else if(document.getElementById('radN').checked) {return "No";} 
    else {return ""; } 
} 

當我改變的單選按鈕「否」,它確實進入,如果循環(下dataEvents),但可編輯的屬性上的「請求」列沒有動態設置爲true。任何幫助非常感謝。謝謝。

+0

'editable'屬性將在開始編輯之前由jqGrid *使用。 **如果要防止動態編輯,必須在相應的現有編輯字段上設置「disable」或「reabonly」屬性/屬性**,而不是設置「editable」屬性。此外,您似乎爲自定義編輯字段分配了固定'id'屬性(''radN'',''radY'')。這很危險,因爲你可以有重複的id。內聯編輯允許您同時將多行編輯爲一行。在這種情況下,將創建兩個具有相同ID的自定義編輯元素,您將遇到問題。 – Oleg 2014-09-23 10:07:34

+0

此外,我建議您在**'

+0

非常感謝@ Oleg ..真的有幫助。你太棒了! – MattO 2014-09-24 11:10:02

回答

0

editable屬性將被jqGrid 使用,之前開始編輯。 如果要防止動態編輯,必須在相應的現有編輯字段上設置禁用或readonly屬性/屬性,而不是設置editable屬性。

此外,您似乎爲自定義編輯字段分配了修復id屬性('radN','radY')。這很危險,因爲你可以有id重複。內聯編輯允許您同時將多行編輯爲一行。在這種情況下,將創建兩個具有相同ID的自定義編輯元素,您將遇到問題。我建議您另外在<label>內設置<input>。在這種情況下,您將不需要任何idfor屬性。嘗試

<label><input type="radio" name="appr" checked="checked" value="Yes"/>Yes</label> 
&nbsp; 
<label><input type="radio" name="appr" value="No"/>No</label> 

可以通過單擊標籤來檢查單選按鈕。

+0

如果$(elem).find(「input [name = appr]:checked」)。val()'爲空,我不希望頁面做回發'enter'。但它確實做了回發。我也嘗試明確提到'return false' ..但它仍然發佈一個空值。我如何在沒有發佈的情況下掛在那裏? – MattO 2014-09-24 13:09:37

+0

@MOOTO:對不起,但是你的意思是「發佈」。如果需要,您可以使用'editrules'來**驗證結果。我不完全理解你的要求和最後你做了什麼。您在來欄中使用自定義編輯控件。你是否在編輯或編輯/添加表單中使用它?你是否考慮在'editoptions'中指定'defaultValue'作爲添加表單或者其他的輸入是'Yes' /'否'?如果你使用'defaultValue',你將創建一個單選按鈕,並且總是有一個選定的值。此外,當前的自定義編輯控件未滿。你需要在'myvalue'函數中實現''set''和''get''操作。 – Oleg 2014-09-24 13:44:19

+0

hi @Oleg,對不起,延遲響應。我的網絡出現問題。我真的明白我在找什麼。通過發佈我的意思是,當沒有任何選項時,它不應該將值發佈到數據庫。我認爲這可以在編輯頁面中使用if條件完成,並根據給定的值將響應傳遞給網格。 – MattO 2014-10-02 11:47:16