2012-03-19 4 views
3

html 테이블을 사용하고있었습니다. 내 요구 사항은 행 수의 변화를 듣고 싶다. 이것을 달성하기 위해 어쨌든 있습니까?테이블 행 수 수신 대기 변경

참고 : 여기에 행 기능을 추가/삭제하지 않아도됩니다.

$("#myTable>tbody>tr").watch("length", function() { 
    alert("row count changed..") 
}); 

또한 그, 내가이 시도

하지만, 위의 코드는 나를 위해 작동하지 않습니다. 여러분 중 누구도이 작업을 수행하는 방법을 알고 있습니까? 사전에

감사합니다,

-Raja.

+0

OP가 다음 jQuery 플러그인을 사용하려고했습니다. http://archive.plugins.jquery.com/project/watch ('watch ("length")'bit) –

+0

답장을 보내 주셔서 감사합니다. 네 그럼요. 그러나 위의 코드는 작동하지 않습니다. 내 실수를 알아낼 수 있니? –

+0

코드가 잘못되어 실제로 충분하지 않습니다. 이 특정 플러그인은 2009 년에 추가되었으며 그 이후에 포기 된 것 같습니다. 대부분의 경우 jQuery의 최신 버전에서는 작동하지 않습니다. –

답변

3

유일한 크로스 브라우저 방식이 아주 예쁜 아니지만 그것은 내가 생각하는 거의 모든 브라우저에서 작동 .

가능한 경우 간격을 사용하는 대신 행 수를 변경할 때 이벤트를 수동으로 트리거하는 것이 좋습니다.

UPDATE :
사용하여있는 jqGrid refresh 이벤트입니다. 수동 클릭에 대한 행을 삭제하는 경우 그것은 또한 격자를 다시로드하지 않는 한

var rowCount = $("#gridid>tbody>tr").length; 
jQuery("#gridid").jqGrid({ 
... 
    refresh: function(){ 
     var currCount = $("#gridid>tbody>tr").length; 
     if (currCount !== rowCount) { 
      alert("Number of rows changed!"); 
      rowCount = currCount; 
     } 
    }, 
... 
}); 

, 당신도이 코드를 실행해야합니다.

+0

답변 해 주셔서 감사합니다. 세트 간격은 나의 경우를위한 해결책을 가지고 가지 않는다. –

+0

setInterval을 사용할 수없고 브라우저 간 솔루션이 필요한 경우 유일한 옵션은 이벤트를 트리거하기 위해 테이블 ​​내용을 변경하는 코드를 사용하는 것입니다. 테이블 업데이트 란 무엇입니까? –

+0

jq 그리드가 테이블을 업데이트 중입니다. –

0

http://www.w3.org/TR/DOM-Level-2-Events/events.html - 이것을 사용할 수 있습니다. IE에는 구현이나 polyfill이 잠시 없습니다.

또한 타이머에 의한 기능 실행으로 TR 카운트를 확인할 수 있습니다. DOM 트리의 변경에 발생하는 (누군가가 감시하는 더 나은 이벤트의 제안이있는 경우,이을 변경하십시오 때문에, 이벤트가되지 않는 것을 주)

+0

나는 아마도 DOMNodeInserted를 생각하고 있다고 생각하지만 문서의 앵커에 직접 지정하거나 링크를 지정해야한다. 전체 DOM 이벤트 스펙의 컨텍스트는 최소한 도움이되지 않습니다. –

+0

답변 해 주셔서 감사합니다. 여기에 게시하기 전에 이미이 링크를 보았습니다. 앞서 말한 것처럼, 행 추가/삭제 구현은 사용되지 않습니다. 그러나 itemssource에 따라 행 수가 변경됩니다. –

+0

이 ordine을 사용 중입니다. top.window.oldCount = 0; (count! = top.window.oldCount) {top.window.oldCount = count; do_something();}} 윈도우즈에서 사용할 수있는 함수는 다음과 같습니다.); function do_something() {} 옵션이 아닙니까? – SilentImp

3

당신은 DOM 이벤트를 DOMSubtreeModified을 모니터링 할 수 있습니다. jQuery의 bind 함수를 사용하여 이벤트가 테이블에서 실행될 때 함수를 실행할 수 있습니다. 이 함수는 행 수가 변경되었는지 여부를 확인할 수 있습니다.

Try It!

var numberOfRows = $("#myTable>tbody>tr").length; 
$("#myTable").bind("DOMSubtreeModified", function() { 
    if($("#myTable>tbody>tr").length !== numberOfRows){ 
     numberOfRows = $("#myTable>tbody>tr").length; 
     alert("row count changed.."); 
    } 
}); 

은 참조 : Is there a JavaScript/jQuery DOM change listener?

+0

답변 해 주셔서 감사합니다. 예, 이것이 해결책을 가져옵니다. 하지만 DOMSubtreeModified 이벤트는 심지어 td에 요소를 추가하는 트리거입니다. 어느 누구에게도 좋지 않습니다. 더 많은 행을 사용할 것입니다 (10000rows 이상). 그래서, 그것은이 권력에 대해 당연한 소리를 내지 않습니다. –

0

내가 타이머와 함께 한 번 그렇게했다. setInterval을 가능성이 사용자 정의 이벤트와 함께있을 것입니다 순간에 이렇게 ...

http://jsfiddle.net/q5Eqr/

var html; 
setInterval(function() { 
    var table = $('table'); 
    if($('table').html() != html){ 
     alert('Changed!'); 
     html = $('table').html(); 
    } 
}, 500);