单击不起作用的链接上的处理程序
Click handlers on links not working
我有一个chrome扩展,我有
popup。html我调用jquery。js, popup。js和link。js
...
<script src="jquery.js"></script>
<script src="popup.js"></script>
<script src="link.js"></script>
</head>
popup.js
var streamGenerator = {
/* Twitch URL to the top 20 streams */
searchOnTwitch_: 'https://api.twitch.tv/kraken/streams?limit=20',
/* XHR Request to grab those streams */
requestStreams: function() {
var req = new XMLHttpRequest();
req.open("GET", this.searchOnTwitch_, true);
req.onload = this.showStreams_;
req.send(null);
},
/* onload event inserting the streams into the DOM */
showStreams_: function(e) {
var streams = JSON.parse(e.target.responseText).streams;
for (var i=0; i < streams.length; i++) {
var stream = {
game: streams[i].game,
name: streams[i].channel.name,
viewers: streams[i].viewers,
link: streams[i].channel.url,
};
$('tbody').append('<tr>'
+ '<td>' + stream.game + '</td>'
+ '<td>' + '<a href=' + stream.link + '>' + stream.name + '</a></td>'
+ '<td>' + stream.viewers + '</td></a>'
);
}
}
};
document.addEventListener('DOMContentLoaded', function() {
streamGenerator.requestStreams();
});
然后是link.js
$(function() {
$('a').click(function(){
chrome.tabs.create({url: $(this).attr('href')});
});
})
这个弹出窗口显示了它应该显示的内容,但是链接没有打开一个新的选项卡。
如果我去chrome的控制台,我没有得到任何错误,但如果我复制/粘贴link.js jquery,链接工作后;
我做错了什么?
您的代码在 link.js
之前加载popup.js
。相关部分按以下顺序执行:
// popup.js
$(function() {
$('a').click( ... );
})
// link.js
document.addEventListener('DOMContentLoaded', function() {
streamGenerator.requestStreams(); //<-- Creates the links
});
$(func)
大致等于document.addEventListener('DOMContentLoaded', func)
,所以你所做的实际上是这样的:
// Run after the DOMContentLoaded "domready" event:
$('a').click(...);
streamGenerator.requestStreams(); // Creates the links
首先,将click
事件绑定到所有现有锚(无)。此后,您将添加新的链接。这个序列显然是行不通的。
可以通过交换popup.js
和link.js
的顺序,或者使用事件委托来解决:
$(document).on('click', 'a', function() {
chrome.tabs.create({url: this.href});
});
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- Adobe Edge:动画完成时添加onComplete处理程序
- 是否可以从输入处理程序中确定输入的类型
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 平均值.on(事件[,选择器][,数据],处理程序)
- getSript在同一对象上多次添加处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何让React JS点击处理程序在执行时更新DOM
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数