我有tumblr的这个代码,我希望当.html_photoset功能发生时,.onkeyup功能不会发生,因为两个功能都使用箭头键! 如何在第二个脚本中添加if以防止在第一个脚本启动时发生?
{block:Photoset}
{block:PermalinkPage}
<script type="text/javascript">
$(document).ready(function() {
$('.html_photoset').killPhotoset({
photoSize: 500
});
});
</script>
<!-- [...] -->
{block:PermalinkPagination}
<div class="permpaginate">
{block:NextPost}
<a href="{NextPost}" id="prevp">Previous Project</a>
{/block:NextPost}
{block:PreviousPost}
<a href="{PreviousPost}" id="nextp">Next Project</a>
{/block:PreviousPost}
</div>
{/block:PermalinkPagination}
<script type="text/javascript">
window.onload = function () {
document.onkeyup = function(event) {
var e = (!event) ? window.event : event;
switch (e.keyCode) {
case 37:
window.location.href = document.getElementById('prevp').href;
break;
case 39:
window.location.href = document.getElementById('nextp').href;
break;
}
};
};
</script>
{/block:PermalinkPage}
{/block:Photoset}
答案 0 :(得分:1)
有很多方法可以解决这个问题。
您可以在html_photoset发生时设置全局标志,然后在您的其他onkeyup处理程序中检查全局标志,如果html_photoset处于活动状态则不执行任何操作。当html_photoset变为非活动状态时,您将清除该标志,以便您的其他密钥处理程序开始工作。
您也可以卸载onkeyup处理程序并在适当的时候重新安装。
您可以在html_photoset处理程序中使用e.stopPropagation()
停止事件传播,这样当您在html_photoset中处理事件时,它将不会传播到您的其他键盘处理程序所在的文档级别。
最干净的可能是选项3。
答案 1 :(得分:0)
您可能需要访问Tumblr Javascript API。显然它是可用的,但只有在你登录时才能使用:
Integrating tumblr blog with website
不幸的是,我无法访问它以获得更多详细信息。
一般来说,您也应该使用像jquery这样的库来抽象您的事件代码,因为您在此处使用的事件调用仅适用于某些浏览器。理想情况下,你可以利用tumblr本身已经使用的任何事件库来完成这项工作,特别是因为你将要根据它们的捆绑方式干预onkeydown / onkeypress / onkeyup事件。
策略是: