<!DOCTYPE html>
<html>
<head>
<title>测试页面</title>
<script src="openlayers/js/jquery-1.8.3.min.js" type="text/javascript"></script>
<style type="text/css">
</style>
<script type="text/javascript">
var data = [{ data: 1 }, { data: 2 }, { data: 3 }, { data: 4 }, { data: 5 }];
function init() {
test();
}
function test() {
var box = document.getElementById('box');
var tb = document.createElement('table');
tb.style.border = '1px solid black';
for (var i = 0; i < data.length; i++) {
var tmpData = data[i];
var tr = document.createElement('tr');
var td1 = document.createElement('td');
td1.innerHTML = i + 1 + ".";
var td2 = document.createElement('td');
td2.innerHTML = "name" + i + 1;
tr.appendChild(td1);
tr.appendChild(td2);
//方式一:js闭包方式监听事件在循环中绑定带参数的问题
//tr.onclick = (function (obj1) { return function () { trClickHandler(obj1) } })(tmpData);
//方式二:将数据绑定到元素上,然后利用js事件的机制找到元素本身,然后在取出数据,作为参数传到外部
tr.data = tmpData;//将数据绑定到元素上
tr.className = 'tr-mark';
tr.onclick = function (evt) {
var evt = evt ? evt : window.event;//获取事件对象
var cObj = evt.srcElement || evt.target;//获取元素本身
while (cObj == null || cObj.className != 'tr-mark') {
if (!cObj) {
break;
}
cObj = cObj.parentElement;
}
//获取到tr
trClickHandler(cObj.data);
};
tr.style.cursor = 'pointer';
tb.appendChild(tr);
}
box.appendChild(tb);
}
var trClickHandler = function (obj1) {
alert(obj1.data);
};
</script>
</head>
<body οnlοad="init()">
<div id="box"></div>
</body>
</html>
<html>
<head>
<title>测试页面</title>
<script src="openlayers/js/jquery-1.8.3.min.js" type="text/javascript"></script>
<style type="text/css">
</style>
<script type="text/javascript">
var data = [{ data: 1 }, { data: 2 }, { data: 3 }, { data: 4 }, { data: 5 }];
function init() {
test();
}
function test() {
var box = document.getElementById('box');
var tb = document.createElement('table');
tb.style.border = '1px solid black';
for (var i = 0; i < data.length; i++) {
var tmpData = data[i];
var tr = document.createElement('tr');
var td1 = document.createElement('td');
td1.innerHTML = i + 1 + ".";
var td2 = document.createElement('td');
td2.innerHTML = "name" + i + 1;
tr.appendChild(td1);
tr.appendChild(td2);
//方式一:js闭包方式监听事件在循环中绑定带参数的问题
//tr.onclick = (function (obj1) { return function () { trClickHandler(obj1) } })(tmpData);
//方式二:将数据绑定到元素上,然后利用js事件的机制找到元素本身,然后在取出数据,作为参数传到外部
tr.data = tmpData;//将数据绑定到元素上
tr.className = 'tr-mark';
tr.onclick = function (evt) {
var evt = evt ? evt : window.event;//获取事件对象
var cObj = evt.srcElement || evt.target;//获取元素本身
while (cObj == null || cObj.className != 'tr-mark') {
if (!cObj) {
break;
}
cObj = cObj.parentElement;
}
//获取到tr
trClickHandler(cObj.data);
};
tr.style.cursor = 'pointer';
tb.appendChild(tr);
}
box.appendChild(tb);
}
var trClickHandler = function (obj1) {
alert(obj1.data);
};
</script>
</head>
<body οnlοad="init()">
<div id="box"></div>
</body>
</html>