2016-11-11 5 views
-1

HoT 헤더에 추가 한 텍스트 입력 필드에서 검색어를 유지 관리하는 데 문제가 있습니다. 검색어를 입력하고 스크롤하면이 용어가 지워질 수 있습니다. 나는 이것이 스크롤시 HoT 헤더 고정 동작과 관련이 있다고 생각합니다.Handsontable 헤더 검색, 입력 텍스트가 스크롤시 간헐적으로 지워짐

단계는 일부 데이터와 함께 colHeaders

  1. 뜨거운 용기를 재생한다. 각/모든 열에 대해 colHeaders에 HTML 입력 텍스트 요소를 포함하십시오.
  2. 입력 텍스트 상자에 텍스트를 입력하십시오.
  3. 데이터가 지워질 때까지 페이지를 아래로 스크롤하십시오. 효과가 나타나지 않으면 페이지를 다시로드하고 동작이 관찰 될 때까지 다시 시도하십시오. 데이터를 지우는 데 필요한 적절한 스크롤을 용이하게하기 위해 페이지 크기를 줄여야 할 수도 있습니다. 또한 행과 열 헤더에 HTML 넣을 수 있습니다

    : http://docs.handsontable.com/0.28.4/demo-custom-renderers.html 나는 지침을 따르는 그러나 :

나는에 내 문제와 관련된 생각합니다. 아래의 체크 박스와 같이 DOM 요소에 이벤트를 첨부해야하는 경우 을 기억하면 id가 아닌 클래스 이름으로 요소를 식별 할 수 있습니다. 행 과 열 머리글이 DOM 트리에서 중복되고 id 속성 이 고유해야하기 때문입니다.

나는 제안대로 클래스별로 검색 상자를 참조했으며 검색 상자가 여러 번 나타날 것으로 예상하도록 코드를 조정했습니다. 검색 값을 유지하는 방법에 대한

$(document).ready(function() { 
 
    var colHeaders = [ 
 
    'ID</br><input name="id" type="text" class="searchID" size="1">', 
 
    'Name</br><input name="name" type="text" class="searchName" size="20">', 
 
    'Address</br><input name="address" type="text" class="searchAddress" size="10">' 
 
    ]; 
 
    var data = [ 
 
    {id: 1, name: 'Ted Right', address: 'A'}, 
 
    {id: 2, name: 'Frank Honest', address: 'B'}, 
 
    {id: 3, name: 'Joan Well', address: 'C'}, 
 
    {id: 4, name: 'Gail Polite', address: 'D'}, 
 
    {id: 5, name: 'Michael Fair', address: 'E'}, 
 
    {id: 6, name: 'Ted Right2', address: 'A'}, 
 
    {id: 7, name: 'Frank Honest2', address: 'B'}, 
 
    {id: 8, name: 'Joan Well2', address: 'C'}, 
 
    {id: 9, name: 'Gail Polite2', address: 'D'}, 
 
    {id: 10, name: 'Michael Fair2', address: 'E'}, 
 
    {id: 11, name: 'Ted Right3', address: 'A'}, 
 
    {id: 12, name: 'Frank Honest3', address: 'B'}, 
 
    {id: 13, name: 'Joan Well3', address: 'C'}, 
 
    {id: 14, name: 'Gail Polite3', address: 'D'}, 
 
    {id: 15, name: 'Michael Fair3', address: 'E'}, 
 
    {id: 16, name: 'Ted Right4', address: 'A'}, 
 
    {id: 17, name: 'Frank Honest4', address: 'B'}, 
 
    {id: 18, name: 'Joan Well4', address: 'C'}, 
 
    {id: 19, name: 'Gail Polite4', address: 'D'}, 
 
    {id: 20, name: 'Michael Fair4', address: 'E'}, 
 
    {id: 21, name: 'Ted Right3', address: 'A'}, 
 
    {id: 22, name: 'Frank Honest3', address: 'B'}, 
 
    {id: 23, name: 'Joan Well3', address: 'C'}, 
 
    {id: 24, name: 'Gail Polite3', address: 'D'}, 
 
    {id: 25, name: 'Michael Fair3', address: 'E'}, 
 
    {id: 26, name: 'Ted Right4', address: 'A'}, 
 
    {id: 27, name: 'Frank Honest4', address: 'B'}, 
 
    {id: 28, name: 'Joan Well4', address: 'C'}, 
 
    {id: 29, name: 'Gail Polite4', address: 'D'}, 
 
    {id: 30, name: 'Michael Fair4', address: 'E'}, 
 
    ]; 
 
    var $container = $("#HoT"); 
 
    var searchParams = ''; 
 
    var searchObj = {}; 
 
    searchObj[0] = {key: 'searchID', className: '.searchID', saved: null}; 
 
    searchObj[1] = {key: 'searchName', className: '.searchName', saved: null}; 
 
    searchObj[2] = {key: 'searchAddress', className: '.searchAddress', saved: null}; 
 

 
    $container.handsontable({ 
 
     data: data, 
 
     colHeaders: colHeaders, 
 
     contextMenu: false, 
 
    }); 
 
    
 
    //loadSavedSearchTerms(); 
 
    searchHandlers(); 
 
    
 
    function searchHandlers(){ 
 
    for(i=0; i < 3; ++i){ 
 
     $(document).on('keydown', searchObj[i].className, function(e){ 
 
     if(e.which === 13) { // Return Pressed 
 
      fetchSearchParams(); 
 
     } 
 
     }); 
 
    } 
 
    } 
 
    /* 
 
    function loadSavedSearchTerms(){ 
 
    for(i=0; i < 3; ++i){ 
 
     if(searchObj[i].saved){ // If a search component previously stored 
 
     $(searchObj[i].className).each(function(j, obj){ 
 
      obj.value = searchObj[i].saved; 
 
     }); 
 
     } 
 
    } 
 
    } 
 
    */ 
 
    function fetchSearchParams(){ 
 
    searchParams = ''; 
 
    // Fetch values from all input fields 
 
    // Note immensely more complicated due to HoT beaviour causing duplications in DOM 
 
    for(i=0; i < 3; ++i){ 
 
     //Due to duplication by HoT return array of values for each input 
 
     searchObj[i].arrayHoT = $(searchObj[i].className).map(function() { 
 
     return this.value; 
 
     }).get(); 
 
     
 
     //Save any terms for this input for future use e.g. sort/scroll ajax call (not included here) 
 
     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].saved){ 
 
     searchParams += '&'+searchObj[i].key+'='+searchObj[i].saved; 
 
     } 
 
    } 
 
    console.log('Final Search params: '+searchParams); 
 
    // Filter Data - AJAX Call with params 
 
    //return getData(searchParams).done(loadHOT); 
 
    } 
 
});
</style><!-- Ugly Hack due to jsFiddle issue --> <script src="http://docs.handsontable.com/scripts/jquery.min.js"></script> <script src="http://docs.handsontable.com/bower_components/handsontable/dist/handsontable.full.js"></script> <link type="text/css" rel="stylesheet" href="http://docs.handsontable.com//bower_components/handsontable/dist/handsontable.full.min.css"> <link rel="stylesheet" media="screen" href="http://handsontable.com/demo/css/samples.css">
<h2>Search Values - Maintain on scroll</h2> 
 
<div id="HoT" class="handsontable"></div>

어떤 제안/아이디어 입력?

참고 : 나는 년부터 문제로 제출 : 내가 설명하는 문제가 버그로 확인되었습니다 HoT Issue - Frozen Header, Input Element Data is Lost on Scroll

답변

0

. handsontable에서 AMBudnik에서

: 우리가 renderAllRows: true을 추가 할 때 문제가 정지하기 때문에

나는이 뷰포트 함께 할 수있는 뭔가가 있다고 생각한다.

업데이트에 대한 Handsontable Github를 참조하십시오