Javascript click()不';t fire但console.log显示输出

Javascript click()不';t fire但console.log显示输出,javascript,jquery,Javascript,Jquery,我的代码中有一个问题,我使用JavaScript单击DOM元素。点击不起作用,我几乎可以肯定这不是愚蠢的编程错误(说起来总是很危险) 删除一些DOM元素后,我希望我的代码单击一个元素并触发其onclick事件。然而,这不起作用。根据我的代码,事件会触发,但不会发生,单击事件会返回jQuery对象 HTML: <div class="castor-tabs"> <div class="castor-tab" data-path="../SiteBuilding/alertbo

我的代码中有一个问题,我使用JavaScript单击DOM元素。点击不起作用,我几乎可以肯定这不是愚蠢的编程错误(说起来总是很危险)

删除一些DOM元素后,我希望我的代码单击一个元素并触发其onclick事件。然而,这不起作用。根据我的代码,事件会触发,但不会发生,单击事件会返回jQuery对象

HTML:

<div class="castor-tabs">
  <div class="castor-tab" data-path="../SiteBuilding/alertbox.js" data-saved="saved" data-editor="5475c897f1900editor">
    <span class="castor-filename">alertbox.js</span>
    <span class="castor-close"><i class="fa fa-fw fa-times"></i></span>
  </div>
  <div class="castor-tab" data-path="../SiteBuilding/index.php" data-saved="saved" data-editor="5475c89903e70editor">
    <span class="castor-filename">index.php</span>
    <span class="castor-close"><i class="fa fa-fw fa-times"></i></span>
  </div>
  <div class="castor-tab active" data-path="../SiteBuilding/makesite.php" data-saved="saved" data-editor="5475c8997ac77editor">
    <span class="castor-filename">makesite.php</span>
    <span class="castor-close"><i class="fa fa-fw fa-times"></i></span>
  </div>
</div>
$(".castor-tabs").on("click", ".castor-close", function() {
    var tab = $(this).parent();
    if(tab.attr("data-saved") == "saved") {
        // File is saved

        if($(".castor-tab").length > 1) {
            // 1 element is 'tab' the other is a second tab
            if(tab.next().length > 0) {
                // If element is to the right
                window.newTab = tab.next();
            } else if(tab.prev().length > 0) {
                // If element is to the left
                window.newTab = tab.prev();
            }
        } else {
            window.newTab = false;
        }

        var editor = tab.attr("data-editor");
        $("#" + editor).remove(); // textarea linked to CodeMirror
        $("#" + editor + "editor").remove(); // Huge CodeMirror-element
        tab.remove();

        if(window.newTab) {
            console.log("window.newTab.click()");
            console.log(window.newTab.click()); // Simulate click()
        }
    } else {
        // File isn't saved
    }
});
onclick事件:

$(".castor-tabs").on("click", ".castor-tab", function() {
    $(".castor-tab.active").removeClass("active");
    $(this).addClass("active");
    var editor = $(this).attr("data-editor");
    $(".CodeMirror").hide();
    $("#" + editor).show();
});
出于某种原因,我将元素保存在窗口对象中。在代码运行并跳过单击部分后,我仍然将要单击的DOM元素保存在窗口对象中。这意味着我可以跑步

console.log(window.newTab.click());
再说一遍。令人惊讶的是,这个会单击元素,而这个会激活单击事件。它还返回DOM元素,而不是jQuery对象

图中前两行显示了失败的单击。第三行是我的手动输入,第四行是click()的成功返回值

我希望你能帮我解决这个问题

更新

.trigger(“click”)不幸地给出了相同的输出

更新2

为了帮助你,我在子域上提供了该网站。我知道你们中的许多人都不喜欢转到另一个页面,但我希望你们能原谅我,因为我认为这不能通过JSFIDLE解决

链接是


单击某些页面打开后,请尝试关闭它们,您将看到我的意思。

不要模拟单击,为什么不从click函数中拉出click逻辑,并使用执行业务逻辑所需的参数调用javascript函数?

您的代码正在工作,但无法触发绑定到
castor close
的click事件,因为
i
标记为空。在里面放一些文字并检查

<span class="castor-close"><i class="fa fa-fw fa-times">Click me</i></span>
点击我

您的点击处理程序要求点击目标关闭类castor,但当您通过JavaScript调用点击时,您是在点击父元素(.castor选项卡),点击处理程序没有反应。

尝试添加
返回false最后,当绑定
时。castor close
单击事件

$(".castor-tabs").on("click", ".castor-close", function() {
    var tab = $(this).parent();
    if(tab.attr("data-saved") == "saved") {
        // File is saved

        if($(".castor-tab").length > 1) {
            // 1 element is 'tab' the other is a second tab
            if(tab.next().length > 0) {
                // If element is to the right
                window.newTab = tab.next();
            } else if(tab.prev().length > 0) {
                // If element is to the left
                window.newTab = tab.prev();
            }
        } else {
            window.newTab = false;
        }

        var editor = tab.attr("data-editor");
        $("#" + editor).remove(); // textarea linked to CodeMirror
        $("#" + editor + "editor").remove(); // Huge CodeMirror-element
        tab.remove();

        if(window.newTab) {
            console.log("window.newTab.click()");
            console.log(window.newTab.click()); // Simulate click()
        }
    } else {
        // File isn't saved
    }

    return false;
});

如果您能为此提供一个JSFIDLE,我们将不胜感激!尝试
.trigger('click')
@Spokey.trigger('click')不幸地给出了相同的输出。看到我的图片更新很奇怪,我尝试了代码,它对我有效。是否因为
tab.attr(“保存的数据”)=“保存的”
不再为真而跳过它?@Spokey。请查看更新2。您将行“$”(“.castor tabs”)。在(“单击“,”.castor close”,function(){”上更改为“$”(“.castor tabs”)。在(“单击”,function(){”上,这不是我想要的,因为事件是针对“.castor close”的元素。这些元素是动态生成的。我进行了一次编辑,将castor close显示为一个红框元素,单击它可与上述代码一起工作。我已经知道单击事件。castor close起作用。但我想单击代码末尾的下一个选项卡。在添加其他代码后,这项操作仍然有效。不确定我遇到了什么问题s、 好吧,我完全误解了这里发生的事情。请看我上一次的编辑。这里没有代码,更多的是概念性的建议。“castor close”元素确实被触发。元素必须为空,因为它是Font Aweasome中的一个图标。在这种情况下,您的代码应该按原样工作,检查控制台错误(如果有)。我尝试单击父元素。请参阅我问题中第二个JavaScript草稿中的onclick元素