3

在 jQuery 中,有一个序列化表单元素的函数,例如我可以将它作为 ajax 请求提交。

假设我们有这样的表格:

<form id="form">
 <select name="single">
  <option>Single</option>
  <option selected="selected">Single2</option>
 </select>

 <input type="checkbox" name="check" value="check1" id="ch1">
 <input name="otherName" value="textValue" type="text">
</form>

如果我在 jquery 的帮助下做到这一点

var str = $( "form" ).serialize();
console.log(str);

结果是

single=Single2&check=check1&otherName=textValue

dart 的 FormElement 中是否有这样的功能,或者我必须自己编写代码?谢谢。

4

2 回答 2

3

我想出了我自己的简单解决方案,它可能不适用于所有情况(但对我来说是可行的)。程序是这样的:

  1. 首先,我们需要从表单中提取所有输入或选择元素名称和值到 Dart 的 Map 中,因此元素名称将是键,值是值(例如 {'single': 'Single2'})。
  2. 然后我们将遍历这个 Map 并手动创建结果字符串。

代码可能如下所示:

FormElement form = querySelector('#my-form'); // To select the form
Map data = {};

// Form elements to extract {name: value} from
final formElementSelectors = "select, input";

form.querySelectorAll(formElementSelectors).forEach((SelectElement el) {
  data[el.name] = el.value; 
});

var parameters = "";

for (var key in data.keys) {
  if (parameters.isNotEmpty) {
    parameters += "&";
  }
  parameters += '$key=${data[key]}';
}

参数现在应该包含指定表单中的所有 {name: value} 对。

于 2013-12-30T10:20:27.090 回答
1

我还没有看到这样的东西。

这个例子中,Seth Ladd 使用 Polymers 模板将表单字段值分配给一个被序列化的类。

于 2013-12-29T17:58:54.980 回答