javascript - 使用单击功能添加新输入会删除以前的输入内容
问题描述
我有一个“添加访客”(添加输入)按钮,当用户单击它时,它下方会出现一个新输入。我的问题是,如果用户填写输入并单击“添加访客”按钮,他们在第一个输入中输入的内容将被删除。
有什么方法可以保留我拥有的功能,但要保留输入中的内容,同时仍添加新功能?
$('#addGuest').click(function() {
var count = $('.guestName').length;
document.getElementById('guestWrap').innerHTML += '<div class="formField guestName" id="guestName' + (count + 1) + '"><label class="label">What is your guest\'s name?</label><input type="text" class="input" name="guest' + (count + 1) + '" id="guest' + (count + 1) + '"></div>';
$('.guestName').fadeIn(400);
});
.formField {
margin-bottom: 40px;
}
.label {
font-family: 'Quicksand', sans-serif;
font-size: 1.2rem;
line-height: 1.5em;
margin: 20px 0;
display: block;
}
.input {
font-family: 'Open Sans', sans-serif;
font-size: .9rem;
display: block;
width: 60%;
padding: 15px 10px;
text-align: center;
margin: 0 auto;
outline: none;
-webkit-transition: 1s;transition: 1s;
}
#guestWrap {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="guestWrap">
<div class="formField guestName" id="guestName">
<label class="label">What is your guest's name?</label>
<input type="text" class="input" name="guest1" id="guest1">
</div>
</div>
<div id="addGuest">
<span class="guestIncrease">Add another guest</span>
</div>
解决方案
当您分配给innerHTML
元素时,当前元素会被销毁;容器被清空,只有原始的 HTML 字符串被保留。因此,容器内任何元素的当前value
s 都会丢失。改为使用insertAdjacentHTML
,它不会取消引用现有元素:
$('#addGuest').click(function() {
var count = $('.guestName').length;
document.getElementById('guestWrap').insertAdjacentHTML('beforeend', '<div class="formField guestName" id="guestName' + (count + 1) + '"><label class="label">What is your guest\'s name?</label><input type="text" class="input" name="guest' + (count + 1) + '" id="guest' + (count + 1) + '"></div>');
$('.guestName').fadeIn(400);
});
.formField {
margin-bottom: 40px;
}
.label {
font-family: 'Quicksand', sans-serif;
font-size: 1.2rem;
line-height: 1.5em;
margin: 20px 0;
display: block;
}
.input {
font-family: 'Open Sans', sans-serif;
font-size: .9rem;
display: block;
width: 60%;
padding: 15px 10px;
text-align: center;
margin: 0 auto;
outline: none;
-webkit-transition: 1s;transition: 1s;
}
#guestWrap {
height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="guestWrap">
<div class="formField guestName" id="guestName">
<label class="label">What is your guest's name?</label>
<input type="text" class="input" name="guest1" id="guest1">
</div>
</div>
<div id="addGuest">
<span class="guestIncrease">Add another guest</span>
</div>
推荐阅读
- angular - NativeScript 插件:无法创建 MQMapView (MapQuest) 的实例
- asp.net-mvc - 为什么我的应用程序不使用脚手架的身份页面?
- c# - C# 获取租户名称 API
- javascript - 多次使用时不显示蒙版图像
- c++ - 具有并发读写的嵌入式数据库
- database - tsq sysfiles.maxsize 显示为 -1
- python - 读取和处理大文件时的多线程(内存太大)
- c# - 添加自定义声明在 asp.net 核心身份中不起作用
- javascript - Android 依赖项有不同的版本 - 分辨率不起作用
- java - java.net.SocketException:连接重置,在 GET 页面上使用 HttpURLConnection