是否可以嵌套像这样的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或提交一切"?
我希望将HTML表单嵌入另一种形式,如下所示:
<form id="form1">
<input name="val1"/>
<form id="form2">
<input name="val2"/>
<input type="button" name="Submit Form 2 ONLY">
</form>
<input type="button" name="Submit Form 1 data including form 2">
</form>
Run Code Online (Sandbox Code Playgroud)
我需要提交form1的全部内容,但是当我提交form2时,我只想在form2中提交数据(不是form1中的所有内容.)这会有用吗?
我可以<form>
在另一个<form>
标签内放置标签吗?
例如:
<form>
<form>
</form>
</form>
Run Code Online (Sandbox Code Playgroud) 我很好奇WebComponents的工作是否有可能在不违反规则的情况下逃脱嵌套HTML表单之类的事情.我问,因为我很好奇WebComponent的内部与包含它们的祖先元素有多孤立.我可以想象,如果使用WebComponents无法嵌套表单,那么由于消费者不了解组件内部的问题,可能会导致建议转向组件远离包含表单.
无论哪种方式,我都进行了一些挖掘并且无法进行任何操作,所以我想我会在这里咨询专家以获得更多见解.
相关文章:
我正在处理以下代码,以便从表单中选择复选框.如果我检查第一个复选框,一切都很好.如果我检查另一个复选框,我在发送bulkcopy
表单时会收到"未定义的索引"错误.请记住,我正在使用post方法获取复选框,并且由于表单位置和字段的复杂性,提交按钮位于复选框上方.我需要的是选择多个复选框并将某些值添加到数据库.
<?php //bulkcopy.php
session_start();
if($_SESSION['admin_logged_in'] != true){
header("Location:login.html");
exit();
}
include 'db.php';
$from = mysql_real_escape_string($_GET['from']);
$room = mysql_real_escape_string($_POST['room']);
if(!empty($_POST['id'])) {
foreach($_POST['id'] as $check) {
$id = $check;
$sel = mysql_query("select * from $from where id = '$id' limit 1 ") or die(mysql_error());
while($row = mysql_fetch_array($sel)){
$preview = $row['preview'];
$text = $row['text'];
$title = $row['title'];
$images = $row['images'];
}
$ins = mysql_query("insert into $room (id, preview, text, title, images) values (' ', '$preview', '$text', '$title', '$images') ") or die(mysql_error()); …
Run Code Online (Sandbox Code Playgroud) 当我使用此代码作为Web视图时,它工作正常,但是当Chrome中的开发人员选项选择Mobile View时,FormCollection会在控制器中显示空字符串
查看(编辑更新)
<div class="page product-details-page deal-product-details-page">
@using (Html.BeginForm("AddProductToCart_Details", "DealProduct", new { productId = Model.Id, shoppingCartTypeId = 1 }, FormMethod.Post))
{
<div class="page-body">
@using (Html.BeginRouteForm("Product", new { SeName = Model.SeName }, FormMethod.Post, new { id = "product-details-form" }))
{
@{
var dataDictAttributes = new ViewDataDictionary();
dataDictAttributes.TemplateInfo.HtmlFieldPrefix = string.Format("attributes_{0}", Model.Id);
@Html.Partial("~/Views/Product/_ProductAttributes.cshtml", Model.ProductAttributes, dataDictAttributes)
}
<!--gift card-->
@{
var dataDictGiftCard = new ViewDataDictionary();
dataDictGiftCard.TemplateInfo.HtmlFieldPrefix = string.Format("giftcard_{0}", Model.Id);
@Html.Partial("~/Views/Product/_GiftCardInfo.cshtml", Model.GiftCard, dataDictGiftCard)
}
<!--rental info-->
@{
var dataDictRental = new ViewDataDictionary();
dataDictRental.TemplateInfo.HtmlFieldPrefix = string.Format("rental_{0}", …
Run Code Online (Sandbox Code Playgroud) 我有一个关于角度2模板驱动形式的问题.我已经设置了这个表单中的一个,如果表单组中的一个输入无效,我希望能够向用户显示警告.
例如,假设我有以下形式:
<form class="form" #f="ngForm" (submit)="submit()">
<div class="form-group">
<input type="text" name="firstName" required [(ngModel)]="user.firstName">
<input type="text" name="lastName" required [(ngModel)]="user.lastName">
</div>
<div class="form-group">
<input type="text name="address" required [(ngModel)]="user.address">
</div>
<button type="submit" [disabled]="!f.valid">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)
如果firstName和/或lastName无效,我希望包含输入"firstName"和输入"lastName"的整个表单组更改.我知道我可以这样做:
<div class="form-group" [class.has-error]="!firstName.valid || !lastName.valid">
<input type="text" name="firstName" required [(ngModel)]="user.firstName" #firstName="ngModel">
<input type="text" name="lastName" required [(ngModel)]="user.lastName" #lastName="ngModel">
</div>
Run Code Online (Sandbox Code Playgroud)
它会工作得很好.但这里有一个棘手的部分:在这个例子中,我只有两个带有简单验证规则的输入,所以它很容易检查并且仍然可读.但是,如果我有10个输入来检查表单组怎么办?我不想最终必须手动检查每个输入的有效性.
我找到的解决方案之一是在第一个中创建一个子表单:
<form class="form" #f="ngForm" (submit)="submit()">
<form #subForm="ngForm" [class.has-error]="!subForm.valid">
<input type="text" name="firstName" required [(ngModel)]="user.firstName">
<input type="text" name="lastName" required [(ngModel)]="user.lastName">
</form>
<div class="form-group">
<input type="text name="address" required [(ngModel)]="user.address">
</div>
<button type="submit" …
Run Code Online (Sandbox Code Playgroud) 我想通过自定义控制器和登录页面更好地控制登录和注销。
我的 SecurityConfiguration 代码目前如下所示:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private SpringDataJpaUserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(this.userDetailsService)
.passwordEncoder(Manager.PASSWORD_ENCODER);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**", "/built/**", "/main.css", "/login.css").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/loginSecure")
.defaultSuccessUrl("/index", true)
.permitAll()
.usernameParameter("username").passwordParameter("password")
.and()
.csrf().disable()
.logout()
.permitAll();
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器中的登录配置:
@RequestMapping(value = "/login")
public String login() {
return "login";
}
Run Code Online (Sandbox Code Playgroud)
我的控制器中的 loginSecure 映射:
@RequestMapping(value="/loginSecure", method = RequestMethod.POST)
public String …
Run Code Online (Sandbox Code Playgroud) 我目前正在构建一个网页,用户可以在该网页上提交订单,并且可以在订单中添加多个商品.现在我有一个订单表格,其中包含所需的字段,如送货地址等等.然后我包括项目表格并关闭表格.我不能再控制包含的表格了.
这是表格:
@foreach ($errors->all() as $error)
<p class="'error">{{ $error }}</p>
@endforeach
{{ Form::open() }}
<input type="textarea" name="comment" placeholder="Comment" />
<input type="text" name="shippingaddress" placeholder="Shipping Address" />
<input type="text" name="project_id" placeholder="Project Id" />
<input type="text" name="user_id" placeholder="User Id" />
@include ('Partials/Items')
<input type="submit" value="Send Requests" />
{{ Form::close() }}
Run Code Online (Sandbox Code Playgroud) forms ×7
html ×6
html5 ×2
php ×2
angular ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
checkbox ×1
foreach ×1
http-post ×1
java ×1
javascript ×1
laravel ×1
nested ×1
nested-forms ×1
spring-boot ×1
validation ×1