如何防止一个脚本在另一个脚本运行时运行
how to prevent a script from working when another one is working
我有这段tumblr的代码,我希望当.html_photoset函数发生时,.onkeyup函数不会发生,因为这两个函数都使用箭头键!如何在第二个脚本中添加if,以防止在第一个脚本打开时发生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}
有很多方法可以实现这一点。
-
当html_photoset发生时,您可以设置一个全局标志,然后在另一个onkeyup处理程序中检查全局标志,如果html_photeset处于活动状态,则不执行任何操作。当html_photoset处于非活动状态时,您将清除该标志,以便其他keyup处理程序开始工作。
-
您也可以卸载onkeyup处理程序,并在适当的时候重新安装它。
-
您可以在html_photoset处理程序中使用
e.stopPropagation()
停止事件传播,这样在处理了html_photeset中的事件后,它就不会传播到其他keyup处理程序所在的文档级别。
最干净的可能是选项3。
您可能需要访问Tumblr Javascript API。显然,它是可用的,但只有当你登录:
整合tumblr博客与网站
不幸的是,我无法访问它以获得更多详细信息。
一般来说,您可能还应该使用像jquery这样的库来抽象事件代码,因为您在这里使用的事件调用只能在某些浏览器中工作。理想情况下,你应该利用tumblr本身已经在使用的任何事件库来完成这项工作,特别是因为你想干预它的onkeydown/onkeypress/onkeyup事件,这取决于它们的绑定方式。
策略是:
- 确定汤博乐正在使用哪个事件对此进行响应
- 删除事件处理程序
- 将您自己的副本添加回中,当按下箭头键时,根据您希望的上下文来确定是激发您的代码还是汤博乐的代码(从您的问题中不清楚,但可能取决于启动事件的标签/焦点等(