在包含链接的表行中使用onClick
using onClick in a table row that also has links in it
我在表行中使用onClick,如下所示:
<tr onmouseover="this.style.cursor='pointer'" onclick="http://www.whatever.com/index.php?var={$foo1}">
我还需要在该表行的某些区域放置链接,即
<td>Stuff Here</td>
<td>Stuff Here</td>
<td>Stuff Here</td>
<td><a href="specialLink.php?var={$foo2}">Here</a></td>
<td>Stuff Here</td>
问题是,"内部链接"(specialallink .php)不能被点击,因为行链接优先。我还有别的选择吗?
谢谢
您可以使用stopImmediatePropagation()来绕过连续/传入的事件。
短的例子:
<tr onclick="alert('tr event')">
<td>tr event</td>
<td onclick="alert('td');event.stopImmediatePropagation();">NO tr event</td>
</tr>
在jsfiddle上测试:http://jsfiddle.net/g8Anh/6/
我会这么做的:
<script type="text/javascript">
var link=true;
</script>
<tr onmouseover="this.style.cursor='pointer'" onclick="if (link) window.location ='http://www.whatever.com'">
<td>Stuff Here</td>
<td>Stuff Here</td>
<td>Stuff Here</td>
<td onmouseover="link=false;" onmouseout="link=true;"><a href="specialLink.php">Here</a></td>
<td>Stuff Here</td>
您还可以这样做(这使用jQuery):
$("td")
.click(function(e){
var tag = e.target.nodeName;
if( tag === 'A' ){
// link was clicked
} else {
// normal td was clicked
}
});
的例子。
这甚至取代了使用内联Javascript的需要。
我实际上会在整个表上放置一个事件,而不是每一行。特别是当你有几百的时候。所以…
<table id="links" style="cursor: pointer;">
<tr data-var="{$foo1}">
<td><a href="http://example.com/">Link</a></td>
<td>Another cell</td>
</tr>
</table>
<script type="text/javascript">
document.getElementById('links').onclick = function(e) {
e = e || window.event;
var t = e.srcElement || e.target;
if( !t.tagName) t = t.parentNode; // some browsers treat text nodes as potential targets
while( t != this) {
if( t.tagName == "A") break;
if( t.getAttribute("data-var"))
location.href = "http://example.com/index.php?var="+t.getAttribute("data-var");
}
};
</script>
此方法不会污染全局作用域,并且使用单个事件总是比每行使用一个事件更有效。
尝试在表格单元格上添加一个id,并使用jQuery来处理单击事件。例如…
<tr id="row1">
<td id="cell1" class="table_cell">etc</td>
<td id="cell2" class="table_cell">etc</td>
</tr>
你的jQuery代码可以通过表格单元格的类捕获每次点击,如下所示…
$(".table_cell").click(function(){
// Activated by a click on any table cell with the class "table_cell"
var cell_id = $(this).attr("id"); // Loads id of td element clicked on
// Insert code that deals with a click on that specific table cell here...
});
您甚至可以尝试将URL放在标题标签中,以类似于我上面检索id的方式检索它,从而消除了许多混乱的javascript和if/then代码。
使用jQuery的。hover()你也可以用一个jQuery函数代替onmouseover和onmouseout。这导致代码更短,更干净,可以放在外部.js文件中,以便在任何需要的页面上轻松使用。
在链接周围的td元素上添加以下属性:
<td onclick="event.cancelBubble=true;">your link with event</td>
这是我们在我的工作中解决IE的方法
相关文章:
- Google图表HTML工具提示,其中包含javascript onclick事件
- 如何在WordPress HTML中包含“onclick”
- onclick上的javascript包含文件
- 如何解析包含返回函数的属性onclick.javascript
- 如何使用jQueryappend插入HTML部分包含onclick函数,该函数有一个参数
- 一个目标中包含多个值的多个JavaScript OnClick事件
- 在包含链接的表行中使用onClick
- 包含字符串的变量在传递给onclick函数时为空
- onClick包含";的功能参数
- HTML 标记 包含 href 和 onclick 以及 AJAX 请求
- 听所有的“onclick”.可能包含子节点的锚标记中的事件
- Selenium Webdriver:不能访问包含onclick和text属性的元素
- jQuery Onclick事件在特定h2包含特定文本
- 当元素相互包含时,如何获得jquery的onClick事件
- 如何将包含HTML的字符串传递给onClick事件
- Html包含另一个带有onclick的Html javascript在页面加载后不起作用
- 如何在Yii CHtml::链接中包含onclick事件的javascript操作
- 获取包含属性onclick的image,然后隐藏img
- 将参数作为字符串传递,在javascript的onclick函数中包含空格
- 向已包含的脚本添加onclick事件