2011-08-04 4 views
0

는 아약스 콘텐츠를로드로 인해, 나는에서 기능을 변경했다 :PrototypeJS Element.prototype.appendChild는 문제

document.observe('dom:loaded',function() {  
    $$('.userListHeaderCell').invoke('observe', 'click', function() {  
     this.toggleClassName('desc');   
     var colnumber = this.up().childElements().indexOf(this);   
     var content = this.up(2); 
     sortColumn(content, colnumber, this.hasClassName('desc'));  
    }); 
}); 

TO :

document.observe('click', function(e, el) { 
    if (el = e.findElement('.userListHeaderCell.sortable')) { 
     el.toggleClassName('desc');   
     var colnumber = el.up().childElements().indexOf(el);   
     var content = el.up(2); 
     sortColumn(content, colnumber, el.hasClassName('desc')); 
    } 
}); 

sortColumn 보이는 같은 :

function sortColumn(content, colnumber, desc) {  
    content.select('.userListRow').sort(function(a,b){   
     var atext = a.down(colnumber).innerHTML.stripTags().toLowerCase();   
     var btext = b.down(colnumber).innerHTML.stripTags().toLowerCase();   
     return atext.localeCompare(btext) * (desc ? -1 : 1);  
    }).each(Element.prototype.appendChild, content); 
} 

토글 및 colnumber 작업 및 내용은 객체 HTMLDivElement이지만 내용 변수를 변환하거나 anothe를 사용해야합니다. r 함수가 아니라 sortColumn에 무엇이 있는지 확실하지 않습니다. 내가 오류는 다음과 같습니다

"자바 스크립트 인수를 변환 할 수 없습니다"nsresult : "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"위치 : "JS 프레임 :: https://www.someurl.com/scripts/prototype.js :: :: 라인 (804)"데이터 : 무슨 짓을]

나는이 일을하기 위해 바꿀 필요가 있니?

감사합니다.

편집 :

IE에서 오류가 보여줍니다 재산 '전화'의 값을 가져올 수 없습니다 : 개체가 null이거나 정의는 prototype.js이다, 라인 (804) 문자 9

을 내가 문제가 함께 생각을 Element.prototype.appendChild

Element.extend (content)를 추가하려고했으나 도움이되지 않습니다.

예 데이터 :

<div id="contentbox_Users" class="userList"> 
    <div class="userListHeader"> 
     <div class="userListHeaderCell col1 sortable">First Name</div> 
     <div class="userListHeaderCell col2 sortable">Last Name</div> 
    </div> 
    <div id="contentbox_People"> 
     <div class="userListRow"> 
      <div class="userListCell col1">John</div> 
      <div class="userListCell col2">Smith</div> 
     </div> 
     <div class="userListRow"> 
      <div class="userListCell col1">Bob</div> 
      <div class="userListCell col2">Ray</div> 
     </div> 
     <div class="userListRow"> 
      <div class="userListCell col1">Fred</div> 
      <div class="userListCell col2">Jones</div> 
     </div> 
    </div> 
</div> 
+0

HTML이 없으면 스크립트가 올바른 요소를 선택하는지 여부를 알기가 어렵습니다. 이와 같은 오류는 대개 요소를 찾을 수 없음을 의미합니다. –

+0

HTML을 게시했습니다. 감사합니다. – fanfavorite

+0

"desc"에 대해 CSS에 경계선을 추가하고 클래스 이름이 추가 될 때 어떤 요소가 선택되는지 확인하십시오. 무슨 일이 일어나는지 보는 것이 도움이 될 수 있습니다. –

답변

1

그것이 내가 갈이 있어야 실패 내 코드이기 때문에.

라인,

}).each(Element.prototype.appendChild, content); 

}).each(function(row) { 
    content.appendChild(row); 
}); 

당신은 일이 더 있는지 확인하기 위해 그런 식으로 시도 할 수 말하는 속기 방법입니다. 나는 오류를 인식하지 못한다. 그러나 빠른 구글은 그것이 Firefox에서 왔음을 암시하며, 비 엘리먼트를 기대하는 네이티브 함수에 전달하는 것과 관련이있다. 이와 같은 상황에서는 어디서나 console.log(...) 전화를 많이 걸고 (그리고 Firefox에서 F12 키를 누름) 어떤 일이 발생하는지 확인하는 경향이 있습니다. 배열 을 로깅하면은 모든 행을 HTML 요소로 표시해야합니다.

+0

고마워, 그게 효과가 있지만, 그것은 행을 contentbox_Users와 같은 레벨에 넣고있다. 나는 그것을 고칠 수있다. – fanfavorite