我正在尝试清除表单,然后使用新数据重新填充表单。我有一个页面,其中包含一个搜索历史列表,以及一个“再次搜索”按钮,当点击它时,它会获取该搜索历史字符串,拆分它,然后再次匹配所有各种表单项;复选框,收音机等。表单中基本上都有各种表单元素,除了复选框之外,所有内容都像我想要的那样填充。我第一次单击填充表单按钮,它工作正常,但在第一次单击后,所有复选框开始变得乱七八糟......一些项目填充像他们应该,有些不是,以一个奇怪的随机模式。我没有包含HTML,因为我认为没有必要,但如果有人需要更多信息,请告诉我。
这会重置表单。我已经对它进行了独立测试,但它确实有效。
function form_reset(){
$('#hosp_search_form')[0].reset();
$('#hosp_search_form').find("input[type=text], textarea").val("");
$('input[type=checkbox]').each(function(){
$('input[type=checkbox]').removeAttr('checked');
});
$('input[type=number]').val('');
$('input[type=radio]').each(function(){
$(this).removeAttr('checked');
});
点击后,首先清除以前值的形式,然后获取其他所需的值并格式化它们...这部分在部分中有点难看,但我已经安慰了所有的值,一切都是应该如何。
$('.search_again_btn').on('click', function(){
form_reset();
$('#hosp_search_form').find('input[type=checkbox]').removeAttr('checked');
var id = $(this).data('id');
var searchstring = $('#searchstring_' + id).text();
var patientcode = $('#patientcode_' + id).text();
var mrn = $('#mrn_' + id).text();
var first_name = patientcode.substr(0,2);
var last_name = patientcode.substr(2,2);
var age = patientcode.substr(4,3);
var gender = patientcode.substr(6,2);
var age = age.replace(/\D+/g, '');
gender = gender.replace(/[0-9]/g, '');
填充部分表格,工作正常
//populate fields in search form
$('input[name=fn]').val(first_name);
$('input[name=ln]').val(last_name);
$('input[name=patientage]').val(age);
$('input[name=mrn]').val(mrn);
填充表单的另一部分,也始终按需使用
//populate gender fields
if(gender == 'F'){
$('.female').attr('checked', 'checked');
}
if(gender == 'M'){
$('.male').attr('checked', 'checked');
}
这是我怀疑问题的地方。 splitsearch是一个长字符串(以前的搜索历史记录),其中的项目由a分隔。他们被分成不同的项目。我控制台记录了它,它正确地将它分解为我需要的较小值,然后遍历这些并遍历所有复选框,每个复选框都有一个数据attr保存值可以在splitsearch中。如果值匹配,则应检查它。这对于splitsearch / search字符串值的任何组合,每次第一次都有效,但在第一次之后,我不知道它在做什么。我希望每次点击,表格都会被清除,并且如我所述,它会再次匹配值。
//populate checkboxes
var splitsearch = searchstring.split('. ');
$.each(splitsearch, function(key, value){
$('input[type=checkbox').each(function(keyb, checkbox){
item = $(checkbox).data('services');
if(item == value){
$(this).attr('checked', 'checked');
console.log($(this));
}
});
这与上面的相同,但每次都有效...可能是因为从来没有像复选框这样的多种组合。
$('input[name=payor]').each(function(k, radio){
if(value == $(radio).data('payors')){
$(this).attr('checked', 'checked');
//console.log($(this));
}
});
同样如上所述并且有效。
$('input[name=bedtype]').each(function(keyc, radio){
bed = $(radio).data('bed');
if(bed == value){
$(this).attr('checked', 'checked');
}
});
下面这部分非常难看,但每次都需要填写表格。
//if searchstring contains Needs Transportation, returns true, else returns false
if(value.indexOf("Needs Transportation") > -1 === true){
$('.transyes').attr('checked', 'checked');
}
if(value.indexOf("Near hospital") > -1 != true){
$('input[name=desiredzip]').val(searchstring.substr(5,5));
}
if(value.indexOf("5 mile radius") > -1 === true){
$('.miles_5').attr('checked', 'checked');
}
if(value.indexOf("10 mile radius") > -1 === true){
$('.miles_10').attr('checked', 'checked');
}
if(value.indexOf("15 mile radius") > -1 === true){
$('.miles_15').attr('checked', 'checked');
}
if(value.indexOf("20 mile radius") > -1 === true){
$('.miles_20').attr('checked', 'checked');
}
});
将窗口滚动到填充的搜索表单并显示它。
window.scrollTo(0,100);
$('#search_show').show();
});
答案 0 :(得分:1)
只是一个想法,但它可能会帮助您重新构建一些代码以保持干燥。
// used to Hold search data in local or global
var data;
function form_reset() {
// clear form
}
function get_search_data() {
// populate data with search results
}
function form_populate() {
// use data to populate form
}
$('.search_again_btn').on('click', function(){
get_search_data();
form_reset();
form_populate();
});
// Initial Load of form
get_search_data();
form_populate();
这样你最初使用相同的填充函数就像你刷新时一样,它会强迫你将数据放入一个变量中,这个变量可以在clear和populate函数中看到,从而消除你对这个和$(this)的依赖
您还需要记住,click函数中的this值将位于click事件本身的上下文中,而不是其余代码所属的JavaScript对象。