Javascript 调用外部脚本与.load jquery冲突
我敢肯定这是另一个DOH!facepalm的问题,但作为设计师,而不是程序员,我需要一些帮助,使其正确 我有一个索引文件,通过jQuery.load调用local.html文件。就这样, (某些选项卡功能在此处不相关-因此链接目标调用) 我的问题是,如果外部调用的.html文件有任何依赖于.js文件的元素,即lightbox弹出窗口,那么它就不起作用 比如:Javascript 调用外部脚本与.load jquery冲突,javascript,jquery,document-ready,Javascript,Jquery,Document Ready,我敢肯定这是另一个DOH!facepalm的问题,但作为设计师,而不是程序员,我需要一些帮助,使其正确 我有一个索引文件,通过jQuery.load调用local.html文件。就这样, (某些选项卡功能在此处不相关-因此链接目标调用) 我的问题是,如果外部调用的.html文件有任何依赖于.js文件的元素,即lightbox弹出窗口,那么它就不起作用 比如: <a href="#" class="open-lightbox">LightBox Link</a> <
<a href="#" class="open-lightbox">LightBox Link</a>
<div class="lightbox">
lightbox content
<a href="#" class="close-lightbox">Close</a>
</div>
单击所述选项卡时,“thistabid”内的内容将显示。不管内容是什么
现在如果我这样做:
<li><a href="#thistabid">Link to open Tab Content</a></li>
<div id="thistabid">
<--Tab Content below-->
<div class="somehtmlpage-load">
<script type="text/javascript">
$('.somehtmlpage-load').load('examples/lightbox.html');
</script>
</div>
<--End Tab Content-->
</div>
$('.somehtmlpage load').load('examples/lightbox.html');
灯箱坏了。lightbox.html的内容是
<a href="#" class="open-lightbox">LightBox Link</a>
<div class="lightbox">
lightbox content
<a href="#" class="close-lightbox">Close</a>
</div>
灯箱内容
与第一个示例中的html相同,其中所有内容都有效。唯一的区别在于它是jQuery加载的,而不是硬编码的
我所说的“如果外部调用的.html文件有任何依赖于.js文件的元素,即lightbox弹出窗口”,是指如果html是外部调用文件的一部分,则lightbox函数不起作用。如果它是硬编码的,它会像预期的那样弹出
<li><a href="#thistabid">Link to open Tab Content</a></li>
<div id="thistabid">
<--Tab Content below-->
<div class="somehtmlpage-load">
<a href="#" class="open-lightbox">LightBox Link</a>
<div class="lightbox">
lightbox content
<a href="#" class="close-lightbox">Close</a>
</div>
</div>
<--End Tab Content-->
</div>
乍一看,.On似乎应该是解决方案,但最有可能的是,我的实现偏离了目标://在load()和document ready之间似乎存在竞争条件 要解决此问题,您需要:
- 在附加click事件之前,请等待load()完成
- 或者将单击附加到load()步骤的容器,并使用事件委派
on()
进行委派的更多信息,请参阅和
代码如下所示:
$(".somehtmlpage-load").on("click", ".open-lightbox", function(){
$('.lightbox').css('display','block');
});
需要通过页面上存在的元素应用“on”或“live”函数。通常使用实际元素的某个父元素。您是否可以在以下行中尝试使用对页面上元素的正确引用:
<li><a href="#thistabid">Link to open Tab Content</a></li>
<div id="thistabid">
<--Tab Content below-->
<div class="somehtmlpage-load">
<!--leave tab empty for now -->
</div>
<--End Tab Content-->
</div>
<script>
(function(){
$('.somehtmlpage-load').load('examples/lightbox.html');
//live or on needs to be applied to an element that exists on th page
$('#thistabid').on('click', '.open-lightbox', function(){
$('.lightbox').css('display','block');
});
$('#thistabid').on('click', '.close-lightbox', function(){
$('.lightbox').css('display','none');
});
})();
</script>
(功能(){
$('.somehtmlpage load').load('examples/lightbox.html');
//live或on需要应用于第页上存在的元素
$('#thistabid')。在('click','上。打开lightbox',函数(){
$('.lightbox').css('display','block');
});
$(“#thistabid”)。在('单击','上。关闭lightbox',函数(){
$('.lightbox').css('display','none');
});
})();
使用SSI解决了我的问题。我试图保持所有的本地驱动器友好,但它似乎造成了比预期更多的问题
选择您最喜欢的开发环境…我在这两个方面都没有遇到任何冲突
ASP-
PHP-
以防其他人遇到类似的问题 是的,我试过了。但没有帮我解决问题。我甚至尝试过遗留的东西。使用jQuery1.7生活,但那不起作用。也许我做得不对,但我确实非常仔细地遵循了API文档。不完全是这样,如果你看看我的lightbox函数,我已经在那里有了.on。.load div类与lightbox无关。这只是从选项卡式界面加载内容。只有当lighbox是加载内容的一部分时,问题才会出现。好吧,那么我不明白你所说的“如果外部调用的.html文件有任何依赖于.js文件的元素,即lightbox弹出窗口”是什么意思。我发布了一个编辑,希望能更好地澄清我的问题:/好的,我明白了。load div类与lightbox有关,因为load div成为lightbox按钮的容器。是的,这很好,但我可以将我的JS从外部文件移动到我的索引,这也很有效。我希望有一种方法可以将所有这些分开。是否要将调用.somehtmlpage load上的load函数的JS部分分开,并为打开和关闭灯箱分配单击操作?是的,理想情况下,.load应该是独立的,希望不会干扰灯箱。
$(".somehtmlpage-load").on("click", ".open-lightbox", function(){
$('.lightbox').css('display','block');
});
<li><a href="#thistabid">Link to open Tab Content</a></li>
<div id="thistabid">
<--Tab Content below-->
<div class="somehtmlpage-load">
<!--leave tab empty for now -->
</div>
<--End Tab Content-->
</div>
<script>
(function(){
$('.somehtmlpage-load').load('examples/lightbox.html');
//live or on needs to be applied to an element that exists on th page
$('#thistabid').on('click', '.open-lightbox', function(){
$('.lightbox').css('display','block');
});
$('#thistabid').on('click', '.close-lightbox', function(){
$('.lightbox').css('display','none');
});
})();
</script>