使用jquery添加字段
Adding fields using jquery
我试图允许用户使用jquery在我的视图中添加和删除电子邮件字段。无论何时单击任一链接,都不会发生任何事情。
html/cshtml
<div id="emailSection">
<ul>
<li>Email(s) to send notice to.</li>
<li><input type="email" name="emails[]" /><a href="#" class="remove_field">Remove</a></li>
<li><a class="add_email_button ui-button" href="#" >Add Another Email</a></li>
</ul>
</div>
js
<script type="text/javascript">
$(document).ready(
function() {
...
$('.remove_field').on("click", function (e) {
e.preventDefault();
$(this).parent('li').remove();
});
$('.add_email_button').on('click', function (e) {
e.preventDefault();
$(this).insertBefore('<li><input type="email" name="emails[]" /><a href="#" class="remove_field">Remove</a></li>');
});
}
);
</script>
这是小提琴
有几个小问题(添加新项的位置和删除的内容-错误的父项),但主要问题是应该为单击事件使用委托的事件处理程序。他们不在乎以后是否添加这些元素。
JSFiddle:http://jsfiddle.net/TrueBlueAussie/yj6ydbgp/3/
$(document).ready(
function() {
$('#emailSection').on('click', '.remove_field', function (e) {
e.preventDefault();
$(this).parent('li').remove();
});
$('.add_email_button').click(function (e) {
e.preventDefault();
$('<li><input type="email" name="emails[]" /><a href="#" class="remove_field">Remove</a></li>').insertBefore(this);
});
}
);
它们的工作方式是列出冒泡到一个不更改的祖先元素的事件(在本例中单击)(如果不方便,则默认为document
),然后应用选择器,然后>将函数应用到导致事件的任何元素。在您的情况下,您可以使用$('#emailSection').on
,因为它是最近的不变祖先。
这在大多数情况下也更有效,因为选择器只在事件时应用,并且只应用于它冒泡通过的元素链。在添加元素的地方,动态委托的事件处理程序是处理事件的最佳方式。
insertbefore必须以另一种方式使用:
$(/* What you need to insert */ ).insertBefore(/* Before what ?*/);
在你的情况下,你必须这样使用:
var html = '<li><input type="email" name="emails[]" /><a href="#" class="remove_field">Remove</a></li>';
$(html).insertBefore( $(this) );
适用于我:http://jsfiddle.net/yj6ydbgp/
---------[编辑]---------------
用于删除:
1/您需要在父级上创建一个事件,以选中所有新的删除按钮(否则创建后他们将不会获得点击事件)。
2/您不能删除<li>父,而不是<div>父级。
新建,正在为"添加和删除"工作http://jsfiddle.net/yj6ydbgp/1/
我知道这应该有效,这里有一些额外的信息:
$(document).ready(
function() {
$(document).on("click", '.remove_field' , function (e) {
e.preventDefault();
$(this).parent('li').remove();
});
$('.add_email_button').on('click', function (e) {
e.preventDefault();
var html = '<li><input type="email" name="emails[]" /><a href="#" class="remove_field">Remove</a></li>';
$(html).insertBefore( $(this) );
});
}
);
注意删除的其他替代方案
$(this).closest('li').remove();
不,你知道什么时候该用什么。
closest()http://api.jquery.com/closest/
parent()http://api.jquery.com/parent/
- 使用单个文本框向多个字段添加严格搜索
- WooCommerce-根据自定义字段添加费用
- 向使用jQuery加载DOM后添加的字段添加不受限制的文本输入DatePickers
- j查询检查复选框是否被选中,然后向输入字段添加值
- 使用 javascript 将各种输入字段添加到一起
- 使用 jQuery 将字段添加到表中的 HTML 表单中
- 如何从动态输入字段添加数字
- Extjs 3.3动态地将字段添加到表单中,并设置它们的标签宽度
- JQuery:如何检查复选框是否被选中并向字段添加属性
- "未捕获的类型错误:未定义的不是函数“;当向输入字段添加值时
- Bootstrap typeahead为隐藏字段添加值
- 使用chrome扩展(HTML、CSS、JavaScript)向输入字段添加可点击的图标/按钮
- 正在向输入字段添加自定义验证
- 使用javascript向输入字段添加值
- 如何将自定义字段添加到Json结果-ASP.NET MVC
- 向选定的弹出字段添加逗号
- Accounts.onCreateUser 未将字段添加到 Meteor 的用户集合中
- 如何将自定义字段添加到 dhtmlxScheduler
- 根据 JavaScript 中的选中复选框将字段添加到页面
- 如何从开始日期中的单独字段添加天数/周,以在日期选择器中获取结束日期