Javascript jqgrid数据URL完成事件
我正在使用jQuery获取零件号的供应商列表。 然后,我想在编辑表单出现后加载一些关于供应商/零件号组合的额外数据。问题在于获取供应商的dataurl方法(我在beforeInitData方法中调用该方法)在beforeShowForm方法执行之前没有完成。因此,当表单首次加载时,我没有要查找的供应商。有没有办法在dataUrl方法完成后运行函数以获取额外数据 我已经试过了,但我知道会有冲突,因为每个请求都会调用ajaxSelectOptions方法,有时我的请求会来自不同的地方,有不同的要求 以下是我在网格中使用的代码:Javascript jqgrid数据URL完成事件,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我正在使用jQuery获取零件号的供应商列表。 然后,我想在编辑表单出现后加载一些关于供应商/零件号组合的额外数据。问题在于获取供应商的dataurl方法(我在beforeInitData方法中调用该方法)在beforeShowForm方法执行之前没有完成。因此,当表单首次加载时,我没有要查找的供应商。有没有办法在dataUrl方法完成后运行函数以获取额外数据 我已经试过了,但我知道会有冲突,因为每个请求都会调用ajaxSelectOptions方法,有时我的请求会来自不同的地方,有不同的要求
jQuery("#receiptPartsTable").jqGrid('editGridRow',"new",
{
height:400,
width:800,
reloadAfterSubmit:false,
recreateForm: true,
beforeInitData: function(form)
{
var selectedPart = rowData.part;
var selectedPartQty = rowData.qty;
//Getting list of suppliers
$("#receiptPartsTable").jqGrid('setColProp', 'supplier', { editoptions:{dataUrl:'getSuppliersForPart.php?part=' + rowData.part} });
},
beforeShowForm: function(form)
{
var selectedPart = rowData.part;
var selectedPartQty = rowData.qty;
$('#part').val(selectedPart);
$('#qty').val(selectedPartQty);
//$('#supplier').val() is not set yet;
var supplier = $('#supplier').val();
//This method is getting called before there is a supplier
getPartDetails(rowData.part, supplier);
//Set up onChange listener. After selecting a supplier, get the part details
$('#supplier').change(function() {
var supplier = $('#supplier').val();
getPartDetails(selectedPart, supplier);
});
}
您没有发布您使用的jqGrid的定义。执行上述代码的上下文也不是很清楚。您以前是否从当前选定的行中获取
rowData
?你在哪里定义它
然而,我认为你走的方向是正确的,你已经找到了解决问题的正确方法。使用ajaxSelectOptions
的complete
回调可能是您可以使用的唯一方法。你写了一些“冲突”,但没有发布更多的细节
我建议您在complete
回调中检查this
的属性。jqGrid设置context
选项(请参阅)$.ajax
调用(与您已经找到的调用完全相同)。因此,您可以在complete
回调中使用this.elem
、this.options
和this.vl
this.vl
是编辑现有行时单元格中的值。通常是要选择的选项的名称this.options
具有可使用的重要属性树:this.options.dataUrl
,this.options.id
,this.options.name
。在表单编辑的情况下,值this.options.id
和this.options.name
相同。在内联编辑的情况下,此.options.id
将有rowid和\uu
作为前缀。它使您能够在complete
回调中执行不同的代码,以进行使用dataUrl
的不同选择
还有一句话。在大多数情况下,您可以从beforeInitData
中删除对setColProp
的调用,并使用和中建议的方法:
您可以只使用
editoptions:{dataUrl:“getSuppliersForPart.php”}
URL将附加part
和id
参数(参见上面的代码)。您可以使用getRowData
而不是id
从其他列获取基于当前选定行的rowid的内容,例如。您没有发布您使用的jqGrid的定义。执行上述代码的上下文也不是很清楚。您以前是否从当前选定的行中获取rowData
?你在哪里定义它
然而,我认为你走的方向是正确的,你已经找到了解决问题的正确方法。使用ajaxSelectOptions
的complete
回调可能是您可以使用的唯一方法。你写了一些“冲突”,但没有发布更多的细节
我建议您在complete
回调中检查this
的属性。jqGrid设置context
选项(请参阅)$.ajax
调用(与您已经找到的调用完全相同)。因此,您可以在complete
回调中使用this.elem
、this.options
和this.vl
this.vl
是编辑现有行时单元格中的值。通常是要选择的选项的名称this.options
具有可使用的重要属性树:this.options.dataUrl
,this.options.id
,this.options.name
。在表单编辑的情况下,值this.options.id
和this.options.name
相同。在内联编辑的情况下,此.options.id
将有rowid和\uu
作为前缀。它使您能够在complete
回调中执行不同的代码,以进行使用dataUrl
的不同选择
还有一句话。在大多数情况下,您可以从beforeInitData
中删除对setColProp
的调用,并使用和中建议的方法:
您可以只使用
editoptions:{dataUrl:“getSuppliersForPart.php”}
URL将附加part
和id
参数(参见上面的代码)。您可以使用getRowData
而不是id
从其他列获取基于当前选定行的rowid的内容,例如。感谢您提供的详细答案。我不知道我可以用“这个”。谢谢你详细的回答。我不知道我可以用“这个”。
ajaxSelectOptions: {
data: {
id: function () {
return $("#receiptPartsTable").getGridParam('selrow');
},
part: function () {
return rowData.part;
}
},
complete: function (jqXHR, textStatus) {
var columName = this.options.name, response = jqXHR.responseText;
...
}
}