2014-09-23 85 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