2016-08-24 56 views
0

免费jqgrid包含3列:价格,数量和总和。如何更新内联编辑中其他列更改的列

使用html5数字输入类型。

如果萨姆塔以串联编辑改变,价格列值应使用式

价格计算值=萨姆/数量;

我想下面来实现这个使用jqGrid的模板,但因为input#Priceinput#Quantity是不确定它不会改变价格列。

元素ID是从行ID创建的,并且在每行中都不相同。 Jqgrid不传递行ID值来改变事件。

在免费的jqgrid中实现这种计算的最佳做法是什么?

var sumColumnTemplate = { 
    "editoptions": { 
     "type": "number", 
     "dataEvents":[{"type":"change","fn":function(e) { 
      $('input#Price').val(parseFloat(this.value)/parseFloat( 
       $('input#Quantity').val() )); 
     } 
     } 
}; 

浏览器检查元素表明,下面的标记在联编辑模式行创建:

<tr role="row" id="1383" tabindex="-1" class="ui-widget-content jqgrow ui-row-ltr" editable="1" aria-selected="false"> 
    ... lot of td s skipped 

    <td role="gridcell" style="text-align:right;" class="" title="4" aria-describedby="grid_Quantity"><input type="number" class="grid-decimal-edit editable" id="1383_Quantity" name="Quantity" cm="[object Object]" icol="5" role="textbox" style="width: 100%; box-sizing: border-box;"></td> 

    <td role="gridcell" style="text-align:right;" class="" 
    aria-describedby="grid_Price"><input type="number" title="" maxlength="15" class="grid-decimal-edit editable" id="1383_Price" name="Price" cm="[object Object]" icol="6" role="textbox" style="width: 100%; box-sizing: border-box;"></td> 

    <td role="gridcell" style="text-align:right;" title="" aria-describedby="grid_Sum"><input type="number" title="" maxlength="15" class="grid-decimal-edit editable" id="1383_Sum" name="Sum" cm="[object Object]" icol="7" role="textbox" style="width: 100%; box-sizing: border-box;"></td> 
    .... 
</tr> 

表中有ID的一部分多行和1383可能是排它的每一行不同数量。

哪种方法可以在内嵌编辑模式下获取当前行的数字值?

引导3,jQuery的,jQuery的UI,ASP.NET MVC 4,Razor的意见,NET 4.6被使用。

更新

列定义:

{"label":"Quantity","name":"Quantity","index":"Quantity","searchoptions":{"sopt":["eq","ne","lt","le","gt","ge"],"maxlength":12,"size":12},"template":"number","formatoptions":{"thousandsSeparator":"","decimalPlaces":4,"defaultValue":""},"align":"right","editoptions":{"type":"number","step":"any","min":-999999,"max":9999999,"title":"","maxlength":12,"dataEvents":[{"type":"change","fn":function(e) {dataChanged(e.target)} 
},{"type":"focus","fn":function(e) {if(typeof e.target.ischanged=='undefined') {e.target.ischanged=false}} 
},{"type":"blur","fn":function(e) {} 
}],"readonly":null,"class":"grid-decimal-edit","disabled":null},"editable":function(options){return getEditable(options,false);} 
,"width":68,"classes":"","hidden":false}, 

{"label":"OstuPrice","name":"Price","index":"Price","searchoptions":{"sopt":["eq","ne","lt","le","gt","ge"],"maxlength":15,"size":15},"template":"number","formatoptions":{"thousandsSeparator":"","decimalPlaces":5,"defaultValue":""},"align":"right","editoptions":{"type":"number","step":"any","min":-99999999,"max":999999999,"title":"","maxlength":15,"dataEvents":[{"type":"change","fn":function(e) {dataChanged(e.target)} 
},{"type":"focus","fn":function(e) {if(typeof e.target.ischanged=='undefined') {e.target.ischanged=false}} 
},{"type":"blur","fn":function(e) {} 
}],"readonly":null,"class":"grid-decimal-edit","disabled":null},"editable":function(options){return getEditable(options,false);} 
,"width":75,"classes":"","hidden":false,"tere":"1234"}, 

{"template":sumColumnTemplate 
,"label":"Sum","name":"Sum","width":80,"index":"Sum","hidden":false}, 
+0

你能张贴栏的定义'价格'和'数量'和其他'sumColumnTemplate'可能是我们的其他列ED?我还看到'cm'和'icol'属性,它们不应该存在于免费jqGrid的当前版本(4.13.4)中。你使用哪个版本? – Oleg

+0

我使用4.13.3-pre。我使用'$('input [Name =“Price”]')'和'$('input [Name =“Quantity”]')'选择器来解决问题。这是最佳做法吗?未来还需要实施其他使用不同色谱柱的计算。 – Andrus

+0

@Oleg。变量cm和icol用于代码中。 jqgrid如何将这些变量转换为列属性? – Andrus

回答

2

的问题存在,因为你使用template属性与对象的值。从jqGrid 4.7开始(请参阅my old pull request),可以定义“标准”模板并将其用作字符串。

一个需要使用下面的代码来定义

$.jgrid = $.jgrid || {}; 
$.jgrid.cmTemplate = $.jgrid.cmTemplate || {}; 
$.jgrid.cmTemplate.mySum = { 
    editoptions: { 
     type: "number", 
     dataEvents: [{ 
      type: "change", 
      fn: function(e) { 
       // some code 
      } 
     }] 
    } 
}; 

一个现在template: "mySum"可以使用:

{"template":"mySum","label":"Sum","name":"Sum","width":80} 

,而不是template: sumColumnTemplate

{"template":sumColumnTemplate,"label":"Sum","name":"Sum","width":80, 
"index":"Sum","hidden":false} 
+0

为什么'template:“mySum”'比'template:sumColumnTemplate'好?他们通过mySum获得完全相同的结果,还需要对cmTemplate进行附加分配。 – Andrus

+0

@Andrus:'template:“mySum”'包含**字符串**值,通过JSON序列化/反序列化。因此你可以通过JSON从服务器加载这样的'colModel'。另一方面,'template:sumColumnTemplate'在对象内包含**函数**,不能在JSON数据中使用。 – Oleg

+0

在更改事件中是否应该确定行ID以进行计算?如果是的话,最好的做法是找到它? '$(this).closest('tr')'? – Andrus

相关问题