【问题标题】:How to make onload script work again after content changed内容更改后如何使 onload 脚本再次工作
【发布时间】:2017-11-22 00:04:39
【问题描述】:

我有一个页面,您可以在其中选择 2 张图片,当您单击其中一张时,div 的内容会发生变化。新内容还有 2 张图片,点击后会加载其他内容。我使用的是javascript,但脚本只加载一次,所以当我到达第二个内容时,它不再改变了。

我有 3 个文件:

Main.html - content1.html - content2.html - script.js

Main.html:

<div id="change">
    <div id="rightside">            
        <img src="img.jpg" class="class1" id="water" alt="right choice">
    </div>
    <div id="leftside">
        <img src="img2.jpg" class="class1" id="water2" alt="left choice">
    </div>
</div>
<script type="text/javascript" src="../js/script.js"></script>

以下是类变更中将被替换的内容: content1.html:

<div id="rightside">            
  <img src="img3.jpg" class="class1" id="water3" alt="right choice">
</div>

<div id="leftside">
    <img src="img4.jpg" class="class1" id="water4" alt="left choice">
</div>

这是我下次单击时要替换的内容: content2.html:

<div id="rightside">            
  <img src="img5.jpg" class="class1" id="water5" alt="right choice">
</div>

<div id="leftside">
    <img src="img6.jpg" class="class1" id="water6" alt="left choice">
</div>

这是假设这样做的脚本:

window.onload = function() {

    document.getElementById("water").onclick = function() 
    {
        $('#change').load('content1.html');

    };

    document.getElementById("water3").onclick = function() {
        $('#change').load('content2.html');

    };

如果我点击 id water 的图片,它会替换为 content1,然后我点击 water3 的图片,没有任何反应

【问题讨论】:

  • 问题是在onload中,`document.getElementById("water3")`不存在。
  • 使用delegated event。这种方法将事件处理程序附加到将始终在页面上的元素,等待事件从动态内容中冒出,检查事件的目标并在它与选定的条件匹配时触发处理程序。虽然看起来好像你只是更新了&lt;img&gt; 元素的src,而不是替换了#change 的所有内容。
  • 是否有明确的规则将点击图片的id与新内容的url关联起来。如果是这样,整个事情都是微不足道的。
  • @hungerstar 这是因为我改变的方式比图像更多,这只是我所拥有的一个简短版本。

标签: javascript jquery html css


【解决方案1】:

您可以使用完整的回调来绑定新元素:

window.onload = function() {

    document.getElementById("water").onclick = function() 
    {
        $('#change').load('content1.html', function() {
             document.getElementById("water3").onclick = function() {
                $('#change').load('content2.html');

            };
        });

    };
 };

参考:http://api.jquery.com/load/

【讨论】:

  • 不错,但是不行,当我得到第二组图片时,点击water3时内容没有变化(例如)
  • @KidsPersonalTv 我将它加载到本地网络服务器中并且它工作正常,您是从网络服务器(http)加载它吗?如果不是,你应该得到一个 CORS 错误
  • 有什么方法可以发给你一个完整的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 2018-04-25
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
相关资源
最近更新 更多