gpt4 book ai didi

javascript - 清除表单并填充 jquery

转载 作者:行者123 更新时间:2023-12-03 09:26:45 25 4
gpt4 key购买 nike

我正在尝试清除表单,然后用新数据重新填充它。我有一个页面,其中包含搜索历史列表,以及“再次搜索”按钮,单击该按钮时,它会获取该搜索历史字符串,将其拆分,然后再次匹配所有各种表单项;表单中基本上包含所有类型的表单元素,并且除了复选框之外,所有内容都按照我想要的方式填充。我第一次单击“填充表单”按钮时,它工作正常,但在第一次单击后,所有复选框都开始变得困惑……有些项目按应有的方式填充,有些则不填充,以一种奇怪的随机模式。我没有包含 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 是一个长字符串(之前的搜索历史记录),各个项目之间以 .并且它们被分成单独的项目。我控制台记录了这一点,它正确地将其分解为我需要的较小值,然后迭代这些值并迭代所有复选框,每个复选框都有一个数据属性,保存可以在 splitsearch 中的值。如果值匹配,则应该对其进行检查。对于 splitsearch/搜索字符串值的任何组合,这每次第一次都有效,但第一次之后,我不知道它在做什么。我希望每次单击时,都会清除表单,并按照我的描述再次进行值匹配。

 //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();
});

最佳答案

只是一个想法,但是,它可能会帮助您稍微重组代码以保持代码干燥。

// 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();

这样,您最初使用与刷新时相同的填充函数,它会强制您将数据放入一个变量中,该变量可以在清除函数和填充函数中看到,从而消除对 this 和 $(this) 的依赖.

您还需要记住,单击函数内的 this 值将位于单击事件本身的上下文中,而不是其余代码所属的 JavaScript 对象。

关于javascript - 清除表单并填充 jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31643325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com