Javascript 手写标题搜索(输入文本)在滚动时间歇性清除

Javascript 手写标题搜索(输入文本)在滚动时间歇性清除,javascript,jquery,handsontable,Javascript,Jquery,Handsontable,在我添加到热标题的文本输入字段中维护搜索词时遇到问题。如果我输入一个搜索词并向下滚动,这个词通常会被清除。我认为这可能与滚动时的热头冻结行为有关 复制步骤 带有一些数据和列标题的热容器。在每个/任何列的列标题中包含HTML输入文本元素 在输入文本框中输入一些文本 向下滚动页面,直到清除数据。如果未看到效果,请重新加载页面并重试,直到观察到行为。 注意:您可能需要减小页面大小,以便进行适当的滚动以观察正在清除的数据 我认为我的问题涉及: 但是,我遵循了以下指导原则: 您还可以将HTML放入行标题和

在我添加到热标题的文本输入字段中维护搜索词时遇到问题。如果我输入一个搜索词并向下滚动,这个词通常会被清除。我认为这可能与滚动时的热头冻结行为有关

复制步骤

  • 带有一些数据和列标题的热容器。在每个/任何列的列标题中包含HTML输入文本元素
  • 在输入文本框中输入一些文本
  • 向下滚动页面,直到清除数据。如果未看到效果,请重新加载页面并重试,直到观察到行为。 注意:您可能需要减小页面大小,以便进行适当的滚动以观察正在清除的数据
  • 我认为我的问题涉及: 但是,我遵循了以下指导原则:

    您还可以将HTML放入行标题和列标题中。如果你需要 将事件附加到DOM元素,如下面的复选框所示,请记住 通过类名而不是id来标识元素。这是因为 和列标题在DOM树和id属性中重复 必须是唯一的

    我已经按照建议按类引用了搜索框,并且我已经调整了代码以期望搜索框多次出现

    $(文档).ready(函数(){
    var colHeaders=[
    “ID
    ”, “名称
    ”, '地址
    ' ]; 风险值数据=[ {id:1,名称:'Ted Right',地址:'A'}, {id:2,姓名:'Frank Orient',地址:'B'}, {id:3,姓名:'Joan Well',地址:'C'}, {id:4,姓名:'Gail Little',地址:'D'}, {id:5,姓名:'Michael Fair',地址:'E'}, {id:6,姓名:'Ted Right2',地址:'A'}, {id:7,姓名:'Frank Honest2',地址:'B'}, {id:8,姓名:'Joan Well2',地址:'C'}, {id:9,姓名:'Gail Polite2',地址:'D'}, {id:10,姓名:'Michael Fair2',地址:'E'}, {id:11,姓名:'Ted Right3',地址:'A'}, {id:12,姓名:'Frank Honest3',地址:'B'}, {id:13,姓名:'Joan Well3',地址:'C'}, {id:14,姓名:'Gail Polite3',地址:'D'}, {id:15,姓名:'Michael Fair3',地址:'E'}, {id:16,姓名:'Ted Right4',地址:'A'}, {id:17,姓名:'Frank Honest4',地址:'B'}, {id:18,姓名:'Joan Well4',地址:'C'}, {id:19,姓名:'Gail Polite4',地址:'D'}, {id:20,姓名:'Michael Fair4',地址:'E'}, {id:21,姓名:'Ted Right3',地址:'A'}, {id:22,姓名:'Frank Honest3',地址:'B'}, {id:23,姓名:'Joan Well3',地址:'C'}, {id:24,姓名:'Gail Polite3',地址:'D'}, {id:25,姓名:'Michael Fair3',地址:'E'}, {id:26,姓名:'Ted Right4',地址:'A'}, {id:27,姓名:'Frank Honest4',地址:'B'}, {id:28,姓名:'Joan Well4',地址:'C'}, {id:29,姓名:'Gail Polite4',地址:'D'}, {id:30,姓名:'Michael Fair4',地址:'E'}, ]; var$container=$(“#热”); var searchParams=''; var searchObj={}; searchObj[0]={key:'searchID',类名:'.searchID',已保存:null}; searchObj[1]={key:'searchName',className:'.searchName',已保存:null}; searchObj[2]={key:'searchAddress',类名:'.searchAddress',保存:null}; $container.handsontable({ 数据:数据, colHeaders:colHeaders, 上下文菜单:false, }); //loadSavedSearchTerms(); searchHandlers(); 函数searchHandlers(){ 对于(i=0;i<3;++i){ $(document).on('keydown',searchObj[i].类名,函数(e){ 如果(e.which==13){//Return按下 fetchSearchParams(); } }); } } /* 函数loadSavedSearchTerms(){ 对于(i=0;i<3;++i){ if(searchObj[i].saved){//如果以前存储了搜索组件 $(searchObj[i].className).each(函数(j,obj){ obj.value=searchObj[i]。已保存; }); } } } */ 函数fetchSearchParams(){ searchParams=''; //从所有输入字段获取值 //注意,由于热beaviour导致DOM中的重复,所以要复杂得多 对于(i=0;i<3;++i){ //由于每个输入值的热返回数组重复 searchObj[i].arrayHoT=$(searchObj[i].className).map(函数(){ 返回此.value; }).get(); //保存此输入的任何术语以备将来使用,例如排序/滚动ajax调用(此处不包括) if(searchObj[i].arrayHoT[0]) searchObj[i].saved=searchObj[i].arrayHoT[0]; else if(searchObj[i].arrayHoT[1]) searchObj[i].saved=searchObj[i].arrayHoT[1]; if(searchObj[i].已保存){ searchParams+='&'+searchObj[i]。键+'='+searchObj[i]。已保存; } } log('最终搜索参数:'+搜索参数); //过滤数据-带参数的AJAX调用 //返回getData(searchParams).done(loadHOT); } });
    搜索值-滚动维护
    
    我描述的问题已确认为一个bug

    来自handsontable的AMBudnik:

    当我们添加
    renderAllRows:true
    时,问题就停止了,所以我猜 与视口有关

    请参阅以获取任何更新