确定字段(在提交事件上)是下拉列表还是输入
Determine if field (on submit event) is a dropdown or a input
我的问题是在我名为提交的按钮上;单击提交按钮后,我想将数据从视图保存到我的模型。我想将每个字段输入存储到一个对象中,以便我可以将数据存储在我的模型中。问题是我想确定它是下拉列表还是输入,因为这是我检索值的方式。但如果有更好的方法,我会洗耳恭听。也许我不需要知道它是文本输入还是下拉菜单的区别。
这是我正在处理的代码:
submit: function(e) {
var field = $(e.currentTarget);
},
selectionChanged: function(e) {
var field = $(e.currentTarget);
var value = $("option:selected", field).val();
var data = {};
data[field.attr('similarID')] = value;
this.model.set(data);
},
fieldChanged: function(e) {
var field = $(e.currentTarget);
var data = {};
data[field.attr('similarID')] = field.val();
this.model.set(data);
},
//update values in model from form
update: function(e) {
var val = $(this.ui.ageAnnuitization).val();
this.model.set({'ageAnnuitization': val});
}
如您所见,我有一个 fieldChanged 和一个 selectionChnaged;但我不需要这两个。我想精简它并让提交完成所有工作。将数据存储到模型中并将数据设置到模型中。
我的下一个问题与查找每个字段名称有关。如果我有:
名字
姓
年龄
州
做我在这里做的事情的简单方法是什么:
data[field.attr('similarID')] = field.val();
而不是对所有人都使用相似的 ID;我如何使用特定于每个字段的 class 名称而不用 4 行代码做同样的事情?
谢谢
您可以使用 jQuery 的 serializeArray
来收集提交表单时的所有数据。 serializeArray
将 return 表单中所有字段的名称和值对的数组,您可以简单地迭代这些数组值并创建所需的对象,然后将其设置为您的模型。它适用于所有类型的输入类型文本、密码、select 等
请参阅下面的工作示例。
$(function () {
$('#myForm').on('submit', function (e) {
e.preventDefault();
var $this = $(this);
var serializedArray = $this.serializeArray() || [];
var modelObject = {};
serializedArray.forEach(function(obj){
modelObject[obj.name] = obj.value;
});
console.log(modelObject);
// Now you can use `modelObject` object to set the model.
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm">
First Name:
<input name="fname" />
<br/>
Last Name:
<input name="lname" />
<br/>
Select Box:
<select name="sbox">
<option value="opt1">Options 1</option>
<option value="opt2">Options 2</option>
</select>
<br/>
<button type="submit">Submit Form</button>
</form>
我的问题是在我名为提交的按钮上;单击提交按钮后,我想将数据从视图保存到我的模型。我想将每个字段输入存储到一个对象中,以便我可以将数据存储在我的模型中。问题是我想确定它是下拉列表还是输入,因为这是我检索值的方式。但如果有更好的方法,我会洗耳恭听。也许我不需要知道它是文本输入还是下拉菜单的区别。
这是我正在处理的代码:
submit: function(e) {
var field = $(e.currentTarget);
},
selectionChanged: function(e) {
var field = $(e.currentTarget);
var value = $("option:selected", field).val();
var data = {};
data[field.attr('similarID')] = value;
this.model.set(data);
},
fieldChanged: function(e) {
var field = $(e.currentTarget);
var data = {};
data[field.attr('similarID')] = field.val();
this.model.set(data);
},
//update values in model from form
update: function(e) {
var val = $(this.ui.ageAnnuitization).val();
this.model.set({'ageAnnuitization': val});
}
如您所见,我有一个 fieldChanged 和一个 selectionChnaged;但我不需要这两个。我想精简它并让提交完成所有工作。将数据存储到模型中并将数据设置到模型中。
我的下一个问题与查找每个字段名称有关。如果我有:
名字 姓 年龄 州
做我在这里做的事情的简单方法是什么:
data[field.attr('similarID')] = field.val();
而不是对所有人都使用相似的 ID;我如何使用特定于每个字段的 class 名称而不用 4 行代码做同样的事情?
谢谢
您可以使用 jQuery 的 serializeArray
来收集提交表单时的所有数据。 serializeArray
将 return 表单中所有字段的名称和值对的数组,您可以简单地迭代这些数组值并创建所需的对象,然后将其设置为您的模型。它适用于所有类型的输入类型文本、密码、select 等
请参阅下面的工作示例。
$(function () {
$('#myForm').on('submit', function (e) {
e.preventDefault();
var $this = $(this);
var serializedArray = $this.serializeArray() || [];
var modelObject = {};
serializedArray.forEach(function(obj){
modelObject[obj.name] = obj.value;
});
console.log(modelObject);
// Now you can use `modelObject` object to set the model.
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm">
First Name:
<input name="fname" />
<br/>
Last Name:
<input name="lname" />
<br/>
Select Box:
<select name="sbox">
<option value="opt1">Options 1</option>
<option value="opt2">Options 2</option>
</select>
<br/>
<button type="submit">Submit Form</button>
</form>