如何执行 html onclick 事件中生成的 javascript 方法
How to execute javascript methods generated in html onlclick events
updateValue() 方法未触发,我什至不确定如何使用浏览器对其进行调试。
function generateHtmlTableRow() {
var tr = $("<tr></tr>");
$("#results").append(tr);
var someTextData = "test";
tr.append("<td><input type=\"button\" value=\"TestButton\" onclick=\"updateValue(someTextData);\" /></td>");
}
function updateValue(newText) {
alert(newText);
}
生成的html就是问题所在。它不能引用 generateHtmlTableRow
函数范围内的变量。所以它会起作用:
function generateHtmlTableRow() {
var tr = $("<tr></tr>");
$("#results").append(tr);
var someTextData = "test";
tr.append("<td><input type=\"button\" value=\"TestButton\" onclick=\"updateValue('" + someTextData + "');\" /></td>");
}
function updateValue(newText) {
alert(newText);
}
$(document).ready(function(){
console.log('log');
generateHtmlTableRow();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="results"></div>
一个优雅的方法是
- 创建
<tr>
时,将 someData
值存储在 HTML5 data-
属性中。 jQuery 有 .data()
function 用于此目的。
- 使用 delegated event handler 捕获
<table>
内的所有按钮点击。然后事件处理程序可以轻松地再次检索数据。
function generateTableRow(someData) {
$("<tr><td><button class='test'>TestButton</button></td></tr>")
.data("value", someData)
.appendTo("#results");
}
$(function(){
$("#results").on("click", "button.test", function () {
var value = $(this).closest("tr").data("value");
alert(value);
});
generateTableRow("test 1");
generateTableRow("test 2");
generateTableRow("test 3");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="results"></table>
updateValue() 方法未触发,我什至不确定如何使用浏览器对其进行调试。
function generateHtmlTableRow() {
var tr = $("<tr></tr>");
$("#results").append(tr);
var someTextData = "test";
tr.append("<td><input type=\"button\" value=\"TestButton\" onclick=\"updateValue(someTextData);\" /></td>");
}
function updateValue(newText) {
alert(newText);
}
生成的html就是问题所在。它不能引用 generateHtmlTableRow
函数范围内的变量。所以它会起作用:
function generateHtmlTableRow() {
var tr = $("<tr></tr>");
$("#results").append(tr);
var someTextData = "test";
tr.append("<td><input type=\"button\" value=\"TestButton\" onclick=\"updateValue('" + someTextData + "');\" /></td>");
}
function updateValue(newText) {
alert(newText);
}
$(document).ready(function(){
console.log('log');
generateHtmlTableRow();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="results"></div>
一个优雅的方法是
- 创建
<tr>
时,将someData
值存储在 HTML5data-
属性中。 jQuery 有.data()
function 用于此目的。 - 使用 delegated event handler 捕获
<table>
内的所有按钮点击。然后事件处理程序可以轻松地再次检索数据。
function generateTableRow(someData) {
$("<tr><td><button class='test'>TestButton</button></td></tr>")
.data("value", someData)
.appendTo("#results");
}
$(function(){
$("#results").on("click", "button.test", function () {
var value = $(this).closest("tr").data("value");
alert(value);
});
generateTableRow("test 1");
generateTableRow("test 2");
generateTableRow("test 3");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="results"></table>