JQuery:在定义事件侦听器之后但在触发侦听器之前删除JS

时间:2015-06-29 19:28:00

标签: javascript jquery event-listener

我有一个问题,搜索实际上没有产生任何结果。如果过去有人问我,我道歉。

我正在尝试定义一个事件监听器,并在定义事件监听器后立即删除JS。问题是,我希望在事件发生之前进行删除。这可能吗?我在JQuery 1.4文档中读到了detach()就像删除,但维护了JQuery数据。这是一个可行的解决方案?删除在事件发生之前放置事件监听器的代码是否有缺点?

我想要删除的代码是动态生成的代码。做这样的事情:

    

    <script id="12341234"> 
        $( function() {
            $('#test').click( function() {
                alert('Hello');
            });
        });
    </script>

稍后在剧本中:

$('#12341234').remove();

这适用于删除脚本,它只是不会触发事件监听器(这是有意义的)。

我尝试这样做的原因是为了增加安全性。敏感字段已被屏蔽,没有人可以访问任何敏感的本身。我只是让PHP生成了相当数量的JS,我不想要“检查元素”的诱惑。如果他们确实看到了它,那不是什么大不了的事。我希望尽可能删除它。

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果有人想知道,我想出了答案。

它的功能与我理论化的一样:它删除了脚本标记及其间的所有内容,但事件监听器保持不变。见下面的例子:

<script id="testscript">
    $( function() {
        $('#testbutton').click( function() {
            alert('Hello!');
        });
    });

    $('#testscript').detach();
</script>

这将保留您的事件监听器,同时防止您的JS在检查时显示。

快速说明,如果有人使用任何可以逐步渲染的调试工具,他们可以在删除代码之前轻松查看代码。但是,如果您只是不希望普通用户看到JS,那么这将有效。

敏感数据仍需要屏蔽或妥善处理。

我仍然不知道问题的答案是detach()是否会产生负面影响,或者是否应该避免这个用例。但是,我做了一些测试,与remove()相比,它似乎没有太大的性能影响。我们说的慢1%或更慢。我还通过文档挖了一些,并重申我最初认为我的用例基本上是detach()的标准用例。使用它似乎没有任何不利之处。我可能错了,如果有的话随时纠正我。