首次运行后链接不会切换

时间:2013-10-28 00:21:13

标签: javascript jquery

不确定此代码无效的原因。当我点击活动链接时,文本应该切换并一直这样做。此代码只运行一次,然后onclick无效。关于JSFiddle的示例。您能否解释一下为什么这对您的解决方案不起作用?

<div id="imageId">Image A, <a id="imageB" href="#">Image B</a></div>


$(document).ready(function() {
    $('#imageB').click(function(event) {
        "use strict";
        alert("imageB");

        event.preventDefault();
        $('#imageId').html("Image B, <a id='imageA' href='#'>Image A</a>").show();
    });
});

$(document).ready(function() {    
    $('#imageA').click(function(event) {
        "use strict";
        alert("imageA");

        event.preventDefault();
        $('#imageId').html("Image A, <a id='imageB' href='#'>Image B</a>").show();
    });
});

3 个答案:

答案 0 :(得分:3)

文档准备就绪时,没有ID为“imageA”的元素。单击“imageB”后添加它,所以它非常简单,为什么它不起作用。

为了让您的代码能够在您更改HTML后立即调用函数,允许javascript知道“imageA”是谁。

这是你修复的例子,当然你仍然可以重构代码,所以你不必复制粘贴两次相同的东西:

http://jsfiddle.net/Waclock/JmmxJ/6/

$(document).ready(function() {
    reloadLinks();
});
function reloadLinks(){
    $('#imageB').click(function(event) {
        "use strict";
        alert("imageB");

        event.preventDefault();
        $('#imageId').html("Image B, <a id='imageA' href='#'>Image A</a>").show();
        reloadLinks();
    });

    $('#imageA').click(function(event) {
        "use strict";
        alert("imageA");

        event.preventDefault();
        $('#imageId').html("Image A, <a id='imageB' href='#'>Image B</a>").show();
        reloadLinks();
    });
}

答案 1 :(得分:1)

使用事件委托...这允许在运行时更改或根本不存在的元素。当你删除一个元素时,直接绑定到它的所有事件都会丢失,即使你在同一个地方使用相同的html替换它并使用页面

$(document).on('click', '#imageA', function(event){
/* your code*/
});

您只需在页面加载时调用一次,无论您更换元素多少次,它都会运行相同的代码。它正在做的是将事件处理程序绑定到树的更高级别(在本例中为文档),并且每当更高级别被克隆时,如果目标是选择器,它将触发。

答案 2 :(得分:0)

尝试:

    $('#imageB').on("click", function(event) {
        "use strict";
        alert("imageB");

        event.preventDefault();
        $('#imageId').html("Image B, <a id='imageA' href='#'>Image A</a>").show();
    });