我在客户端 Amber 解决方案中有一个这样的 HTML 表单
<form id="myForm1">
Creator: <input type="text" name="creator" />
<br>
Title: <input type="text" name="title" />
<br>
Description: <input type="text" name="description" />
<br>
Doctype: <input type="text" name="doctype" />
<br>
Tags: <input type="text" name="tags" />
</form>
问题
如何遍历表单的所有字段,以便将字段内容放入 Amber 字典,字段名称为键,文本内容为值?
Stephen-Eggermont 和 MKroenert 回答后的新版本问题
如何获取表单的所有字段的值,以便将它们放入 Amber 字典中,字段名称为键,文本内容为值?
还是有一种惯用的方法来创建表单并检索值?
注意:如果这使事情更具可读性,则可以使用 Amber 代码构建表单。
参考
- https://github.com/amber-smalltalk/amber/wiki/FAQ#how-do-i-get-the-text-value-of-an-input-field
- http://api.jquery.com/each/
回答后编辑:FileIn 代码
MKroenert 提供的答案工作正常
下面是我测试过的他的代码。它可以直接在工作空间中归档
Widget subclass: #AmberFormExample
instanceVariableNames: 'dictionary inputs'
package: 'TodoList'!
!AmberFormExample methodsFor: 'not yet classified'!
collectValues
inputs do: [ :each |
dictionary at: (each asJQuery attr: 'name')
put: (each asJQuery val).
].
Transcript show: dictionary printString
!
initialize
dictionary := Dictionary new.
inputs := Array new.
!
renderInput: inputName on: html
html p: [
html label with: inputName.
inputs add: (html input id: inputName;
name: inputName;
yourself)]
!
renderOn: html
inputs removeAll.
html form id: 'myForm1'; with: [
#('Creator' 'Title' 'Description' 'Doctype' 'Tags') do: [ :each |
self renderInput: each on: html]].
html button
with: 'Collect Inputfield Values';
onClick: [
self collectValues.
]
! !