2012-12-17 2 views
0

MVC 응용 프로그램에서 양식이 있고 2 개의 비동기식 AJAX 호출을 만듭니다. 1은 새 페이지의 데이터를 가져오고 다른 하나는 검색 결과를 표시합니다. 이 호출 이전에 폼의 초기로드가 정상입니다. 나는 행 바를 색칠하고 싶다.JQuery - 변경 이벤트를 연결할 수 없습니다.

$("#tblePagedList").on("change", styleRows); 

function styleRows() { 
    $("#tblePagedList tr:even").addClass("row1"); 
    $("#tblePagedList tr:odd").addClass("row2"); 
} 

그러나 새 페이지로 이동하거나 검색을 수행하면 이러한 스타일이 적용되지 않습니다. 변경 시도를 시도하는 시도가 실패합니다.

$("#tblePagedList").on("change", styleRows); 

또는

$("#tblePagedList").change(styleRows); 

내 표는 아래와 같다;

<table id="tblePagedList"> 
    <thead> 
     <tr> 
      <th> 
       Company 
      </th> 
      <th> 
       Address 
      </th> 
      <th style="width:100px;"> 
       Telephone 
      </th> 
      <th style="width:100px;"> 
       Contact 
      </th> 
      <th style="width:100px;"> 
       Trade 
      </th> 
      <th></th> 
     </tr> 
    </thead> 
    <tbody id="tblePagedListBody"></tbody> 
    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @item.Company 
      </td> 
      <td> 
       @item.AddressLine 
      </td> 
      <td> 
       @item.Telephone 
      </td> 
      <td> 
       @item.Contact 
      </td> 
      <td> 
       @item.TradeName 
      </td> 
      <td> 
       @Html.ActionLink("Details", "DetailsSubcontractor", new { id = item.CompanyId }) 
      </td> 
     </tr> 
    } 
+1

을 왜 순수 CSS? '#tblePagedList tr : n 번째 자식 (짝수) {/ * 스타일 정의 * /}'http://caniuse.com/#feat=css-sel3 –

+0

CSS 솔루션이 작동합니다. 고맙습니다! – arame3333

답변

2

On Change event은 DOM이 변경 될 때가 아니라 입력 값이 변경 될 때 트리거됩니다.

`$("#tblePagedList").on("update", handler)` 

및 AJAX 호출이 성공할 때 수동으로 트리거 : 당신이 이벤트가 필요한 경우, 나는 업데이트 현실을 부르 자, 사용자 정의를 등록 할 것

`$("#tblePagedList").trigger("update")` 

을하지만 난 당신 있는지 확실하지 않습니다 정말로 이벤트가 필요합니다. 아마도 styleRows을 AJAX 콜백으로 호출하면 충분합니까?

그리고 정말로 idea of ​​events가 좋다면 BackboneJS로 전환하는 것을 고려해보십시오. 가져온 데이터를 콜렉션에 저장하고 콜렉션 업데이트 이벤트에 연결하여 해당 이벤트에 대한 테이블을 렌더링 할 수 있습니다.

은 BTW 두 이후 styleRows 호출 된 클래스 제거, 잘못된 결과를 얻을 수 있습니다

 
function styleRows() { 
    $("#tblePagedList tr:even").removeClass("row1 row2").addClass("row1"); 
    $("#tblePagedList tr:odd").removeClass("row1 row2").addClass("row2"); 
} 
+0

나는 백본을 아직 시험해 보지 못했지만, 나는 그것을 배우는 것을 좋아할 것이다. 그러나 그것은 길어야 할 일이다. 어쩌면 나는 크리스마스 동안 복수형 과정을 살펴볼 것입니다. 두 솔루션 모두 styleRows 함수를 실행했지만 스타일은 출력 페이지에 지속되지 않았습니다. CSS 솔루션이 효과가 있었고 (질문 아래의 주석 참조) 물론 간단합니다. 그러나 나는 너의 대답에서 무언가를 배웠다. 그래서 나는 진드기를 말한다. – arame3333

+0

@ arame3333 : 아마도 질문에 대한 오해가 있었지만 기꺼이 도와 줬습니다. Yury Tarabanko의 CSS 솔루션은 브라우저 요구 사항과 일치하는 한 가장 좋습니다. 그러나 오래된 IE에서 색상이 지정되지 않은 것은 그렇게 나쁘지 않습니다. – skalee

관련 문제