输入字段在预览页面中重复
Input fields are repeating in preview page
我有三个复选框,其中两个是自动选中的,我正在显示带有选中复选框的标签的文本字段。
但是在点击预览之后,我得到了两次输入字段。我的意思是我得到了两个文本字段中的四个。
我的 ready script
有问题。你能帮我解决这个问题吗?
<!--If any check box clicked then active this script-->
$(function() {
$(".add_student_input").change(function() {
if (this.checked) {
$(".students_items").append('<div class="form-group row ' + this.id + '"><label class="col-sm-4 col-form-label">' + $(this).next('label').text() + '</label><div class="col-sm-8"><input type="' + $(this).data('type') + '" name="input[]" placeholder="' + $(this).next('label').text() + '" class="form-control" /></div></div>');
} else {
$('.students_items').find('.' + this.id).remove();
}
});
});
<!--end script -->
$(document).ready( function(){
$checkbox=$(".add_student_input");
$checkbox.each(function(){
var isChecked = $(this).is(":checked");
if(isChecked) {
$(".students_items").append('<div class="' + this.id + '"><label>' + $(this).next('label').text() + '</label><input type="' + $(this).data('type') + '" name="input[]" placeholder="' + $(this).next('label').text() + '" class="form-control" /></div>');
} else {
//check false
$('.students_items').find('.' + this.id).remove();
}
});
});
/*form preview*/
function PrintPreview() {
var toPrint = document.getElementById('open_in_preview');
var popupWin = window.open('', '_blank');
popupWin.document.open();
popupWin.document.write('<html><title>::Print Preview::</title><link rel="stylesheet" type="text/css" href="Print.css" media="screen"/></head><body>')
popupWin.document.write(toPrint.innerHTML);
popupWin.document.write('</body></html>');
popupWin.document.close();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<body id="open_in_preview">
<input type="checkbox" name="a" id="class_1" class="add_student_input" data-type="text" checked><label for="class_1">number1</label>
<input type="checkbox" name="b" id="class_2" class="add_student_input" data-type="text" checked><label class="class_2">number2</label>
<input type="checkbox" name="c" id="class_3" class="add_student_input" data-type="text"><label class="class_3">number3</label>
<a href="#" class="btn btn-primary" onclick="PrintPreview();">Preview form</a>
<span class="students_items"></span>
</body>
我得到这样的输出。
作为评论,为什么放在页面下方的脚本会导致多次输入,因为在加载时,它会运行文档准备好并根据复选框再次追加,因此解决问题,将 empty()
放在上面 "reset" 输入之前附加一个新的 1
$(document).ready( function(){
$checkbox=$(".add_student_input");
$(".students_items").empty(); //add this to clear it
$checkbox.each(function(){
var isChecked = $(this).is(":checked");
if(isChecked) {
$(".students_items").append('<div class="' + this.id + '"><label>' + $(this).next('label').text() + '</label><input type="' + $(this).data('type') + '" name="input[]" placeholder="' + $(this).next('label').text() + '" class="form-control" /></div>');
} else {
//check false
$('.students_items').find('.' + this.id).remove();
}
});
});
用 OP 的另一个问题更新
请看plnkr
https://plnkr.co/edit/wnGWwcgAySrjfNQwqX3J?p=preview
这里的问题与 empty()
无关,它是它在 DOM
就绪时的表现(但我将其删除,因为你的问题现在不同了),我已经增强了你的脚本,以便它只需要需要的标签,并且结合脚本使它更清晰,请看一下,所以为了真正阅读html中的检查行为,我们需要添加
this.setAttribute("checked", "checked");
这将强制 checked
在 html 中呈现,并且
$(function(){})
等同于 $(document).ready(function(){})
我有三个复选框,其中两个是自动选中的,我正在显示带有选中复选框的标签的文本字段。
但是在点击预览之后,我得到了两次输入字段。我的意思是我得到了两个文本字段中的四个。
我的 ready script
有问题。你能帮我解决这个问题吗?
<!--If any check box clicked then active this script-->
$(function() {
$(".add_student_input").change(function() {
if (this.checked) {
$(".students_items").append('<div class="form-group row ' + this.id + '"><label class="col-sm-4 col-form-label">' + $(this).next('label').text() + '</label><div class="col-sm-8"><input type="' + $(this).data('type') + '" name="input[]" placeholder="' + $(this).next('label').text() + '" class="form-control" /></div></div>');
} else {
$('.students_items').find('.' + this.id).remove();
}
});
});
<!--end script -->
$(document).ready( function(){
$checkbox=$(".add_student_input");
$checkbox.each(function(){
var isChecked = $(this).is(":checked");
if(isChecked) {
$(".students_items").append('<div class="' + this.id + '"><label>' + $(this).next('label').text() + '</label><input type="' + $(this).data('type') + '" name="input[]" placeholder="' + $(this).next('label').text() + '" class="form-control" /></div>');
} else {
//check false
$('.students_items').find('.' + this.id).remove();
}
});
});
/*form preview*/
function PrintPreview() {
var toPrint = document.getElementById('open_in_preview');
var popupWin = window.open('', '_blank');
popupWin.document.open();
popupWin.document.write('<html><title>::Print Preview::</title><link rel="stylesheet" type="text/css" href="Print.css" media="screen"/></head><body>')
popupWin.document.write(toPrint.innerHTML);
popupWin.document.write('</body></html>');
popupWin.document.close();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<body id="open_in_preview">
<input type="checkbox" name="a" id="class_1" class="add_student_input" data-type="text" checked><label for="class_1">number1</label>
<input type="checkbox" name="b" id="class_2" class="add_student_input" data-type="text" checked><label class="class_2">number2</label>
<input type="checkbox" name="c" id="class_3" class="add_student_input" data-type="text"><label class="class_3">number3</label>
<a href="#" class="btn btn-primary" onclick="PrintPreview();">Preview form</a>
<span class="students_items"></span>
</body>
我得到这样的输出。
作为评论,为什么放在页面下方的脚本会导致多次输入,因为在加载时,它会运行文档准备好并根据复选框再次追加,因此解决问题,将 empty()
放在上面 "reset" 输入之前附加一个新的 1
$(document).ready( function(){
$checkbox=$(".add_student_input");
$(".students_items").empty(); //add this to clear it
$checkbox.each(function(){
var isChecked = $(this).is(":checked");
if(isChecked) {
$(".students_items").append('<div class="' + this.id + '"><label>' + $(this).next('label').text() + '</label><input type="' + $(this).data('type') + '" name="input[]" placeholder="' + $(this).next('label').text() + '" class="form-control" /></div>');
} else {
//check false
$('.students_items').find('.' + this.id).remove();
}
});
});
用 OP 的另一个问题更新 请看plnkr https://plnkr.co/edit/wnGWwcgAySrjfNQwqX3J?p=preview
这里的问题与 empty()
无关,它是它在 DOM
就绪时的表现(但我将其删除,因为你的问题现在不同了),我已经增强了你的脚本,以便它只需要需要的标签,并且结合脚本使它更清晰,请看一下,所以为了真正阅读html中的检查行为,我们需要添加
this.setAttribute("checked", "checked");
这将强制 checked
在 html 中呈现,并且
$(function(){})
等同于 $(document).ready(function(){})