我有一个带字段的extjs表单。用户不需要在每个字段中输入数据,因此我不想提交没有数据的字段。我希望它只发布实际上有数据的字段。这可能吗?
答案 0 :(得分:4)
我建议使用表单的beforeaction
事件。处理此事件时,您可以检查所有字段。如果所有值都为空,则为return false;
。以下示例适用于ExtJS4,必须在ExtJS3中工作:
myform.on('beforeaction', function(form, action) {
if (action.type == 'submit') {
var doSubmit = false, vals = form.getValues();
for (var i in vals)
if (vals[i] !== '') {
doSubmit = true;
break;
}
return doSubmit;
}
});
Actualy,不提交空字段的正确方法是使用action submitEmptyText
配置。但它在当前版本(ExtJS4.0.2a)中不起作用。
答案 1 :(得分:3)
另一个选项是覆盖组件的getSubmitValue()
方法,如果此字段为空,则返回null
,这样它就不会包含在提交字段中。
{
xtype: 'combo',
getSubmitValue: function(){
var value = this.getValue();
if(Ext.isEmpty(value)) {
return null;
}
return value;
}
}
答案 2 :(得分:1)
不使用表单的提交,而是使用url,方法类型(GET / POST)和params(以及调用文档中说明的任何其他选项)直接调用Ext.Ajax.request(...)。 要生成参数,请迭代表单字段并在添加到参数之前检查空值。
答案 3 :(得分:1)
此错误也存在于ExtJS 4.0.7中。
As Molecule Man指出:
Actualy,不提交空字段的正确方法是使用action的submitEmptyText配置。但它在当前版本(ExtJS4.0.2a)中不起作用。
修复此错误的可能解决方案是通过扩展“Ext.form.Bnel”中的2个函数,“Ext.form.Basic”中的getValues(其中包含错误)和createForm(创建基本表单)通过以下方式:
Ext.define("My.form.Basic", {
alias: "form.mybasic",
extend: "Ext.form.Basic",
getValues: function(asString, dirtyOnly, includeEmptyText, useDataValues) {
var values = {};
this.getFields().each(function(field) {
if (!dirtyOnly || field.isDirty()) {
var data = field[useDataValues ? "getModelData" : "getSubmitData"](includeEmptyText);
if (Ext.isObject(data)) {
var isArray = Ext.isArray;
Ext.iterate(data, function(name, val) {
if (includeEmptyText && val === "") {
val = field.emptyText || "";
}
if (includeEmptyText || ((!isArray(val) && val !== "") || (isArray(val) && val.length !== 0))) {
if (name in values) {
var bucket = values[name];
if (!isArray(bucket)) {
bucket = values[name] = [bucket];
}
if (isArray(val)) {
values[name] = bucket.concat(val);
}
else {
bucket.push(val);
}
}
else {
values[name] = val;
}
}
});
}
}
});
if (asString) {
values = Ext.Object.toQueryString(values);
}
return values;
}
});
Ext.define("My.form.Panel", {
alias: "form.mypanel",
extend: "Ext.form.Panel",
createForm: function() {
return Ext.create("My.form.Basic", this, Ext.applyIf({listeners: {}}, this.initialConfig));
}
});
代码是从ext源代码复制的。唯一的变化是在每个字段的迭代中:引入了以下包装“if”:
if (includeEmptyText || ((!isArray(val) && val !== "") || (isArray(val) && val.length !== 0)))
我有点晚了,但是比以后更好......