- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个shadowbox脚本。当我加载页面时,一切工作正常,但是当我调用此jquery加载函数,然后尝试通过单击图像来触发阴影框时,较大的图像将在新窗口中打开。
这是代码:
<link href="CSS/main.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="shadowbox-3.0.3/shadowbox.js"></script>
<script type="text/javascript">
Shadowbox.init();
</script>
<p id="compas"><a href="images/coverage.jpg" rel="shadowbox" title="Coverage map"></a></p>
最佳答案
编辑
因此,我们终于了解了这一点。在首次对此问题发表评论15个小时后,至少经过了50次迭代,我们终于确定了问题所在以及如何解决。
当我在服务器上创建本地aaa.html
和bbb.html
时,它实际上突然使我震惊。那是当我感到惊讶的是,当$.load()
运行回调函数时,正在替换的内容的元素节点已从DOM中完全删除。因此,一旦替换了#menu-home
内容元素,便将它们从DOM中删除,并且不再将Shadowbox应用于它们。
一旦我弄清楚了,那只不过是一次网页搜索,我发现:
Nabble-Shadowbox - Reinit Shadowbox
具体来说,是mjijackson的响应。他描述的是如何使用以下方法“重启”(重新初始化)Shadowbox:
Shadowbox.clearCache();
Shadowbox.setup();
#menu-home
内容被重新加载,需要做的是清除Shadowbox缓存(本质上是将其关闭在页面上),然后运行
Shadowbox.setup()
,它将再次检测元素。您也不会再次运行
Shadowbox.init()
方法。
Shadowbox.setup()
复制/粘贴到
$.load()
之后,至少是在代码中依次进行。但是,由于需要首先进行缓存清除,因此这是行不通的,主要是因为
.clearCache()
完成(完成并运行所有回调)之后,才需要运行
.setup()
和
$.load()
函数。这两个函数需要在
$.load()
回调处理程序中运行;否则,您将立即运行它,但是
$.load()
是异步的,将在以后的某个时间完成。
<base>
,但是以下是
HEAD
元素的顶部:
<base href="http://62.162.170.125/"/>
<div id="menu">
<ul>
<li><a id="menu-home" href="index.html" rel="http://jfcoder.com/test/homecontent.html">Home</a></li>
<li><a id="menu-services" href="services.html" rel="http://jfcoder.com/test/servicescontent.html">Services</a></li>
<li><a id="menu-tour" href="tour.html" rel="http://jfcoder.com/test/tourcontent.html">Tour</a></li>
<li><a id="menulogin" href="login.html">Login</a></li>
</ul>
</div>
HREF
属性中有一个相对URL,以及指向服务器上某些页面的链接。链接到我的服务器的原因是由于跨站点脚本限制,我无法通过AJAX访问您的
aaa.html
和
bbb.html
文件。我网站的链接也应删除。
rel
属性的原因是,我希望允许
href
属性的链接继续起作用,以防JS无法正常运行或出现其他错误。如果您有单独的文件,一个文件用于完整的HTML文档,另一个文件仅用于片段,这就是您想要做的。如果可以同时提供完整文档和链接文件中的仅内容,那么您可能不需要
rel
属性,但是您需要管理请求,以便服务器知道如何响应(完整文档或仅内容部分)。
var boxInitialize = function(){
try {
if (!Shadowbox.initialized) {
Shadowbox.init();
Shadowbox.initialized = true;
} else {
Shadowbox.clearCache();
Shadowbox.setup();
}
} catch(e) {
try {
Shadowbox.init();
} catch(e) {};
}
};
Shadowbox.initialized
属性,以便可以跟踪
Shadowbox.init()
是否已运行(只能运行一次)。但是,如果可能的话,将所有内容都放在一个位置是个好主意。
boxInitialize();
window.onload = boxInitialize; // Note, no () at the end, which execute the function
$()
,而是将其替换为
jQuery()
。如果您最终遇到一个环境,其中有多个框架和库在争夺
$()
,那么这可能会变成一场噩梦,因此最好避免这种情况。前几天这实际上只是对我真正的好。
.ready()
回调中具有闭包作用域,因此我们可以利用该作用域来保存几个“私有(private)”变量,以供脚本执行中不同时间使用。
var $ = jQuery,
$content = jQuery("#content"), // This is "caching" the jQuery selected result
view = '',
detectcachedview = '',
$fragment,
s = Object.prototype.toString,
init;
,
。通过使其等于jQuery变量来了解如何“导入”
$
,这意味着您实际上可以在该#中使用它。
var loadCallback = function(response, status, xhr){
if (init != '' && s.call(init) == '[object Function]') {
boxInitialize();
}
if (xhr.success()
&& view != ''
&& typeof view == 'string'
&& view.length > 1) {
$fragment = $content.clone(true, true);
cacheContent(view, $fragment);
}
};
$.load()
完成AJAX请求的过程时运行。注意,在请求运行时,请求中返回的内容已放置在DOM上。还要注意,我们将实际的缓存内容存储在
$content.data()
中,该内容永远都不应从页面中删除。仅其下的内容。
var cacheContent = function(key, $data){
if (typeof key == 'string'
&& key.length > 1
&& $data instanceof jQuery) {
$content.data(key, $data.html());
$content.data(detectcachedview, true);
}
};
cacheContent()
是您可能不希望使用的一种方法。本质上,如果已经在先前的请求中加载了它,那么它将被缓存然后直接检索,而不是启动另一个
$.load()
从服务器获取内容。您可能不想这样做;如果是这样,只需注释掉
if
函数中的第二个
menuLoadContent()
块。
var setContent = function(html){
$content.empty().html(html);
if (init != '' && s.call(init) == '[object Function]') {
boxInitialize();
}
};
$content
元素清空,然后添加指定的基于字符串的标记,该标记我们之前通过获取
$content.html()
保存了。这是我们将尽可能添加的内容;您会看到单击并加载了不同的链接后,重新单击以使其重新显示确实非常快。另外,如果它与当前加载的请求相同,那么它将完全跳过运行代码。
$content
之类,是因为它是对包含jQuery元素的变量的引用。之所以这样做,是因为它在闭包范围内,这意味着它不会显示在全局范围内,但可用于诸如事件处理程序。
var menuLoadContent = function(){
// This is where I cancel the request; we're going to show the same thing
// again, so why not just cancel?
if (view == this.id || !this.rel) {
return false;
}
// I use this in setContent() and loadCallback() functions to detect if
// the Shadowbox needs to be cleared and re-setup. This and code below
// resolve the issue you were having with the compass functionality.
init = this.id == 'menu-home' ? boxInitialize : '';
view = this.id;
detectcachedview = "__" + view;
// This is what blocks the superfluous $.load() calls for content that's
// already been cached.
if ($content.data(detectcachedview) === true) {
setContent($content.data(view));
return false;
}
// Now I have this in two different spots; there's also one up in
// loadCallback(). Why? Because I want to cache the content that
// loaded on the initial page view, so if you try to go back to
// it, you'll just pickup what was sent with the full document.
// Also note I'm cloning $content, and then get it's .html()
// in cacheContent().
$fragment = $content.clone(true, true);
cacheContent(view, $fragment);
// See how I use the loadCallback as a function reference, and omit
// the () so it's not called immediately?
$content.load(this.rel, loadCallback);
// These return false's in this function block the link from navigating
// to it's href URL.
return false;
};
$.click()
声明;相反,我选择
#menu a[rel]
,它将获得菜单中具有
a
的每个
rel="not empty rel attribute"
元素。同样,请注意我在这里如何使用
menuLoadContent
作为函数引用。
jQuery("#menu a[rel]").click(menuLoadContent);
boxInitialize();
来设置Shadowbox。
$.load()
的方式,以及我看到的与
iframe
有关的未捕获异常:
Uncaught exception: Unknown player iframe
tour
菜单项实现的。
class="content"
的元素。我看到的唯一好处是页面永远不会重新加载,但是您需要采取另一种方法来获取和显示数据,这并不涉及通过AJAX下载整个页面,然后试图让jQuery进行解析。只是您想要的部分。
$.load()
切换会以意外的方式破坏您的页面。
$.load()
的幻想?在速度方面,它不会产生太大的影响,即使有的话。当您可以将它们链接到相同的内容而不会出现问题时,使用这样的AJAX只是没有意义。
.content
标志而不是整个HTML文档的情况下,才请求标记的?contentonly=true
部分。这是传统上的方式,如果您具有脚本环境,则通常相对简单。$(".content").load('index.html?contentonly=true');
var $content = $('.content');
$content.find('.content-view').hide();
$content.find('#services-content').show();
#!
(hashbang)技术来加载内容,尽管我认为搜索引擎存在一些问题。但是,这是我一段时间前组合在一起的一种简单技术的链接:
class
(即
.content
)引用“content”元素。标记中应该只有一个内容显示元素,对吗?不止一个?使用
id="content"
;这就是
ID
属性的用途,以引用单个元素。
class
旨在按照它们共享的某些特征对元素进行分组,因此,在上面我对内联内容 View
.hide()
进行编码(请参阅#2)时,我会寻找所有相似的
class="content-view"
元素(它们都包含内容 View 标记)。但是
$content
变量应该引用
$('#content');
。这是对元素的描述。
关于javascript - jQuery函数调用后,shadowbox停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144577/
我正在使用 Tkinter 在 python 上写一个小游戏(顺便说一下,我不允许使用任何其他非内置模块)并且我想在主窗口上播放背景歌曲,这是那个包含标题,以及转到其他窗口和内容的按钮... 所以问题
我有一个 Azure WebJob,它在一个非常简单的应用服务标准:1 Small(计划)上运行。 现在,我的 WebJob(有 5 个函数正在运行)出现问题 - 我想停止 5 个正在运行的函数中的
我在 MacOS Lion 上使用 XCode 4.2。在模拟器中调试 iPhone/iPad 应用程序时,我使用 XCode 工具栏上的“停止”按钮(产品 | 停止)退出应用程序。在此之后,XCod
我刚刚下载了android开放源代码项目,并尝试使用make来构建它,我收到了以下消息: build/core/prebuilt.mk:91: *** recipe commences before
我以前从未制作过 makefile,但我们已经收到了这个,但是,如果我尝试运行它,它只会说, missing separator. stop. 我不知道可能出了什么问题 - 我已经确保空格只按制表符。
好吧,这段代码非常基本。用户将答案输入文本框,如果等于“第一+第二”,他们就得到一分。然后,他们有 5 秒钟的时间回答下一个数学问题。如果他们这样做了,函数“doCalculation”将再次运行,他
我在 viewController 中有一个循环动画 - (void)moveAnimating { [UIView animateWithDuration:2.0f animations:^
当我有一个待处理的 ASIFormDataRequest(作为异步任务启动)仍在执行并且用户按下后退按钮(为了弹出 View )时,我的 viewController 出现问题。 有什么方法可以停止该
我们正在使用 flashdevelop 和 flash CS 3 开发基于 flash 的游戏。我们正在使用 flash CS3 发布 swc,swc 将作为库在 flashdevlop 中使用。 一
我在线程中有一个连接,因此我将其添加到运行循环中以获取所有数据: [[NSRunLoop currentRunLoop] run]; [connection scheduleInRunLoop
你好,我做了一个 php 套接字服务器来从 plc 获取数据,plc 被配置为 tcp 套接字客户端。 我有一个严重的问题,如果本地网络出现故障,似乎功能 socket_accept 停止,plc 无
这个问题已经有答案了: How to stop a setTimeout loop? (10 个回答) 已关闭 8 年前。 请帮助获得正确的函数或方法来停止 setTimeout 函数。 我一直在尝试
我正在运行一个多项目SBT(v0.13)构建,并且希望它在子项目中遇到的第一个错误(编译)时快速失败(停止)。 当前的行为是,当某项无法在子项目中进行编译时,构建将继续(以编译所有其他子项目)。 一旦
我有播放.wav文件中声音的代码,但是我无法停止播放歌曲,甚至无法退出程序直到播放结束。因为这是一首5分钟的歌曲,所以这是一个问题。这是我如何播放wav的代码: public class EasySo
我正在寻找一种解决方案,该如何控制从JSF应用程序播放音频文件。 我不需要完整的解决方案,只需引用我可以用来控制播放音频文件(开始/停止/更改声音)的组件即可。 我尝试搜索过去的问题,但没有成功。 我
我已经在test.ps1中编写了以下函数,在运行该脚本以启动/停止/ ..时我想做一个选择: function getState($SeviceName) { $server = @('hos
我必须设置一个 10 分钟的计时器,它会重定向到主屏幕。此外,它必须在每个操作(例如按下按钮)时重置。我找到了这个计时器:https://github.com/fengyuanchen/vue-cou
我正在制作一个聊天应用程序,功能之一就是发送声音。发送的HTML如下: LOL Stop Play 第一次发送时,“自动播放”效果很好。因此,现在我
我基本上希望页面能够接受用户输入的时间(以秒为单位)。 之后我希望当用户按下“开始”按钮时开始倒计时按下暂停按钮时“暂停”。还有一个重置按钮,以便用户可以从头开始倒计时。 这是我到目前为止得到的:
我需要停止 $.each 循环,加载图像,然后继续循环。我有 Canvas ,可以在其中加载对象图像。对象以正确的顺序排列在数组中。现在,当我尝试从数组加载对象时,存在一个问题:由于尺寸不同,并且它们
我是一名优秀的程序员,十分优秀!