Jquery和click事件
我有以下代码,元素被添加到页面中,但不寻常的是,click事件从未触发。有什么想法吗Jquery和click事件,jquery,Jquery,我有以下代码,元素被添加到页面中,但不寻常的是,click事件从未触发。有什么想法吗 function ToggleData(e) { var parentRow = $(this).parent().parent(); var rowData = $(':nth-child(2)', parentRow); var html = $("<input type='text' id='amendedval' value='" + $.trim(rowData.text
function ToggleData(e) {
var parentRow = $(this).parent().parent();
var rowData = $(':nth-child(2)', parentRow);
var html = $("<input type='text' id='amendedval' value='" + $.trim(rowData.text()) + "'/>");
//Add the update tick
var imgTick = $("<img src='../images/tick.png' id='imgTick'/>");
rowData.text('');
rowData.append(html);
rowData.append(imgTick);
imgTick.click(updateTickClick);
};
function updateTickClick(e) {
alert('hi');
};
功能切换数据(e){
var parentRow=$(this.parent().parent();
var rowData=$(':第n个子(2'),parentRow);
var html=$(“”);
//添加更新标记
var imgTick=$(“”);
rowData.text(“”);
附加(html);
rowData.append(imgTick);
单击(updateTickClick);
};
函数updateTickClick(e){
警报(“hi”);
};
你能试试吗
$("imgTick").onclick = updateTickClick;
我认为添加事件处理程序可能需要实际的DOM引用,而不是使用innerHTML构建的内容
--编辑
看起来问题出在选择parentRow和rowData上——下面是我的简化示例,它在FF3.5和IE7中都适用。唯一的更改是如何选择rowData:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Testing onclick</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
function ToggleData(e){
var rowData = $('td');
var html = $("<input type='text' id='amendedval' value='" + $.trim(rowData.text()) +"'/>");
//Add the update tick
var imgTick = $("<img src='tick.png' id='imgTick'/>");
rowData.text('');
rowData.append(html);
rowData.append(imgTick);
imgTick.click(updateTickClick);
};
function updateTickClick(e) {
alert('hi');
};
</script>
</head>
<body>
<table>
<tr>
<td><a href="#" onclick="ToggleData(this); return false;">Click me</a></td>
</tr>
</table>
</body>
</html>
测试onclick
功能切换数据(e){
var rowData=$('td');
var html=$(“”);
//添加更新标记
var imgTick=$(“”);
rowData.text(“”);
附加(html);
rowData.append(imgTick);
单击(updateTickClick);
};
函数updateTickClick(e){
警报(“hi”);
};
它可以是使用或不使用匿名函数注册的回调您是否尝试在VS中调试以查看这里发生了什么。这里提供的信息似乎不完整,无法推断任何事情。对于id为imgTick的div,我将在jQuery中为单击事件执行此操作:
$('#imgTick').click(function({
alert('Hi');
})) 您的imgTick正在动态添加到页面中。请尝试使用.live,而不是使用.click():
imgTick.live("click", updateTickClick);
而且,不,与上面所说的相反,它不必是匿名的。改变了
var rowData=$(':第n个子(2'),parentRow);
到
var rowData=$('td:n第n个子项(2)”,parentRow)
现在单击事件正确发生。仍然是相同的问题,没有触发任何事件。他正在使用jQuery的单击事件绑定器(而不是onclick DOM绑定器)。imgTick无论如何都应该是DOM的一部分,因为它被附加到rowdata中。如果imgTick周围没有引号,怎么样?我建议您查看Firebug(),它的调试器对于消除这样的bug非常有用等同于“document.createElement(“IMG”)”?jQuery解析字符串,然后创建并返回DOM元素,而不是使用innerHTML将其插入文档中?为什么需要这样做?我认为传递函数引用是完全有效的。不需要匿名函数,函数引用是完全合法的。如Tony所指出的,如果没有live,则需要函数回调来注册启动时未知的事件。是否可以使用FireBug检查rowData和parentRow是否实际包含任何DOM对象?(可能选择器返回0个元素)正在使用correctdata.try窗口将img添加到正确的页面。alert('hi')可能;-)有趣的是,如果我将图像添加到parentRow,而不是rowData,则单击事件会引发火灾,我不确定原因。这是我想的,但我想我会检查。他在元素添加到页面后绑定单击。我想用于获取imgTick变量的选择器不正确?不应该只有美元吗。
imgTick.live("click", updateTickClick);