如何将表单的所有元素转换为JavaScript对象?
我想有一些方法从我的表单中自动构建一个JavaScript对象,而不必遍历每个元素.我不想要返回的字符串,$('#formid').serialize();也不想要返回的地图$('#formid').serializeArray();
是否可以嵌套像这样的html表单
<form name="mainForm">
<form name="subForm">
</form>
</form>
Run Code Online (Sandbox Code Playgroud)
这两种形式都有效吗?我的朋友遇到了这个问题,这是subForm作品的一部分,而另一部分却没有.
我知道xhtml不支持嵌套的表单标签,我已经
在stackoverflow中读到了关于这个主题的其他答案,但我仍然没有想出一个优雅的问题解决方案.
有人说你不需要它,他们想不到这种情况是需要的.好吧,我个人无法想到一个我不需要它的场景.
让我们看一个非常简单的例子:
您正在创建一个博客应用程序,并且您有一个表单,其中包含一些字段,用于创建新帖子和工具栏,其中包含"保存","删除","取消"等"操作".
<form
action="/post/dispatch/too_bad_the_action_url_is_in_the_form_tag_even_though_conceptually_every_submit_button_inside_it_may_need_to_post_to_a_diffent_distinct_url"
method="post">
<input type="text" name="foo" /> <!-- several of those here -->
<div id="toolbar">
<input type="submit" name="save" value="Save" />
<input type="submit" name="delete" value="Delete" />
<a href="/home/index">Cancel</a>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
我们的目标是以不需要javascript的方式编写表单,只需要简单的旧HTML表单和提交按钮.
由于动作URL是在Form标签中定义的,而不是在每个单独的提交按钮中定义,我们唯一的选择是发布到通用URL,然后启动"if ... then ... else"来确定按钮的名称提交.不是很优雅,但我们唯一的选择,因为我们不想依赖javascript.
唯一的问题是,按"删除",将提交服务器上的所有表单字段,即使此操作所需的唯一内容是带有post-id的隐藏输入.在这个小例子中并没有什么大不了的,但我的表格中有数百个(可以这么说)我的LOB应用程序中的字段和标签(由于要求)必须一次性提交所有内容,无论如何这看起来效率很低而浪费.如果支持表单嵌套,我至少可以在其自己的表单中包含"删除"提交按钮,只包含post-id字段.
您可以说"只需实施"删除"作为链接而不是提交".这在许多层面都是错误的,但最重要的是因为像这里的"删除"这样的副作用动作永远不应该是GET请求.
所以我的问题(特别是那些说他们不需要形成嵌套的人)是你做什么的?是否有任何优雅的解决方案,我缺少或底线真的"要么需要javascript或提交一切"?
我很惊讶,之前没有人问过这个问题.
查看Json对象文档和快速谷歌搜索并没有产生令人满意的结果.
它的优点是什么?这个怎么运作?
编辑:为了清楚起见,请看一下这个展平/不展平的例子.
谢谢.
我正在尝试构建一个扩展对象的函数,如:
{
'ab.cd.e' : 'foo',
'ab.cd.f' : 'bar',
'ab.g' : 'foo2'
}
Run Code Online (Sandbox Code Playgroud)
进入嵌套对象:
{ab: {cd: {e:'foo', f:'bar'}, g:'foo2'}}
Run Code Online (Sandbox Code Playgroud)
喜欢这个php函数:Set :: expand()
当然不使用eval.
我需要展平嵌套对象.需要一个班轮.不确定这个过程的正确用语是什么.我可以使用纯Javascript或库,我特别喜欢下划线.
我有 ...
{
a:2,
b: {
c:3
}
}
Run Code Online (Sandbox Code Playgroud)
而且我要 ...
{
a:2,
c:3
}
Run Code Online (Sandbox Code Playgroud)
我试过了 ...
var obj = {"fred":2,"jill":4,"obby":{"john":5}};
var resultObj = _.pick(obj, "fred")
alert(JSON.stringify(resultObj));
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我也需要这个......
var obj = {"fred":2,"jill":4,"obby":{"john":5}};
var resultObj = _.pick(obj, "john")
alert(JSON.stringify(resultObj));
Run Code Online (Sandbox Code Playgroud) 我会尽力解释我想要做的事情.
我有两个模型,我和我收到的api响应.当项目api响应进来时,我需要将其映射到我的模型并插入所有项目.这当然很简单.这是问题所在,我需要在不知道自己在做什么的情况下这样做.我的代码将以两个字符串传递,一个是我的模型映射路径和一个api响应映射路径.
这是两条路
var myPath = "outputModel.items[].uniqueName"
var apiPath = "items[].name"
Run Code Online (Sandbox Code Playgroud)
基本上是所有items的apiPath,推到items在myPath与设置uniqueName
它归结为我的代码不知道何时需要映射两个项目,或者即使它们包含数组或简单字段到字段路径.它们甚至可以包含多个数组,如下所示:
********************示例*************************
var items = [
{
name: "Hammer",
skus:[
{num:"12345qwert"}
]
},
{
name: "Bike",
skus:[
{num:"asdfghhj"},
{num:"zxcvbn"}
]
},
{
name: "Fork",
skus:[
{num:"0987dfgh"}
]
}
]
var outputModel = {
storeName: "",
items: [
{
name: "",
sku:""
}
]
};
outputModel.items[].name = items[].name;
outputModel.items[].sku = items[].skus[].num;
Run Code Online (Sandbox Code Playgroud)
************************这是上面的预期结果
var result = {
storeName: "",
items: [ …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的对象
{ "status": "success", "auth": { "code": "23123213", "name": "qwerty asdfgh" } }
Run Code Online (Sandbox Code Playgroud)
我想将其转换为点符号(一级)版本,如:
{ "status": "success", "auth.code": "23123213", "auth.name": "qwerty asdfgh" }
Run Code Online (Sandbox Code Playgroud)
目前我正在使用字段手动转换对象,但我认为应该有更好,更通用的方法来执行此操作.有没有?
注意:有一些示例显示相反的方式,但我找不到确切的方法.
注意2:我希望它与我的服务器端控制器动作绑定一起使用.
我试图压扁一个对象,其中键将是叶节点的完整路径.我可以递归地识别哪些是叶节点但是试图构建整个路径.
样本输入:
{
one: 1,
two: {
three: 3
},
four: {
five: 5,
six: {
seven: 7
},
eight: 8
},
nine: 9
}
输出:
{
one: 1,
'two.three': 3,
'four.five': 5,
'four.six.seven': 7,
'four.eight': 8,
nine: 9
}
从这个答案我学会了如何在c#中展平JSON对象.来自JSON字符串:
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
Run Code Online (Sandbox Code Playgroud)
至:
以下是字符串行,而不是对象
menu.id:file
menu.value:File
menu.popup.menuitem[0].value:New
menu.popup.menuitem[0].onclick:CreateNewDoc()
menu.popup.menuitem[1].value:Open
menu.popup.menuitem[1].onclick:OpenDoc()
menu.popup.menuitem[2].value:Close
menu.popup.menuitem[2].onclick:CloseDoc()
Run Code Online (Sandbox Code Playgroud)
现在,我想扭转这个过程.我可以从这个问题找到实现,但它是在JavaScript中.
如何unflatten(返回从行结构化JSON)在C#与json.net?