다음 문제에 대한 해결책을 찾고있었습니다. 데이터 테이블을 정의하는 자바 스크립트 함수에 객체가 있습니다. 이 테이블의 행을 테이블 셀의 onclick 핸들러 (td 요소)를 사용하여 정의 된 함수에 전달하여 해당 요소에 대한 추가 정보가있는 팝업을 열 수 있도록하려고합니다.예를 들어 onclick을 사용하여 지정된 javascript 함수에 javascript 객체를 전달하는 방법
나는 이것에 대한 몇 가지 해결책을 찾았지만 주로 PHP에서 준비된 문자열을 포함하고 자바 스크립트에 전달되었습니다. 내 경우에는 위의 기능이 필요한 수준의 PHP가 포함되어 있지 않습니다.
몇 가지 실험을 한 후 다음을 생각해 냈습니다.
개체를 인라인 HTML 함수에 전달하려면 2x stringify가 필요합니다. 첫 번째는 json 문자열을 만들고 두 번째 문자열은 모든 큰 따옴표를 이스케이프 처리하고 처음과 끝에 큰 따옴표를 추가합니다. 그런 다음 수신 함수는 JSON.parse()에만 JSON 문자열을 전달하면됩니다. 내가 여기를 게시하고
// JSON format for json_txt is:
// { "column 1" : ["c1 data 1", "c1 data 2", ...],
// "column 2" : ["c2 data 1", "c2 data 2", ...],
// ...
// }
function createTable(json_txt, el_id)
{
var el = document.getElementById(el_id);
var o = JSON.parse(json_txt);
var s = '<table>';
var num = numTableRows(o); // just returns number of rows
for (var r=0; r<num; r++)
{
s += '<tr class="tbl_data">';
for (var col in o)
{
if (col === 'a special column name here')
{
var js = {};
for (var c in o) js[c] = o[c][r];
s += "<td onclick='onTrackShowInfo(this," + JSON.stringify(JSON.stringify(js))+")'>";
}
else
s += '<td>';
s += o[col][r];
s += '</td>';
}
s += '</tr>';
}
s += '</table>';
el.innerHTML = s;
}
....
function onTrackShowInfo(el, json_row)
{
var o = JSON.parse(json_row);
// ok, we have the row from element 'el' at this point
}
한 가지 이유는, 사람이 어떤 문제를 보는 경우도 물어 유사한, 뭔가를 찾고있을 수 있습니다 다른 사람들을 돕기 위해, 또는 이것에 더 나은 솔루션에 도달했습니다 특정 문제.
EDIT :이 코드가 실행되는 컨텍스트를 조금 더 보여주기 위해 매우 단순화 된 createTable() 함수 버전이 추가되었습니다. 이 편집에서
이벤트 처리기를 할당하는 데 'onclick'을 사용하지 않고 대신 최신 DOM API를 사용하는 것이 훨씬 쉽습니다. 어쨌든 테이블 행에 * index * 만 저장하면됩니다. – Pointy
@ Pointy가 말한 것에 대해 확장했다. 클릭 이벤트를 처리하려면'addEventListener'를 사용해야합니다. 그러면 문제가 해결됩니다. – EvilZebra
@Pointy에 동의합니다. 이제 HTML을 깨지 않기 위해 JSON을 두 번 이스케이프해야합니다. 개인적으로 끔찍한 해결책. JSON 데이터를 사이드 배열에 저장하고 인덱스로 참조하십시오. 또한 이벤트 처리기를 사용하면 더 좋습니다. – Mouser