只有从html set onclick事件调用代码声明函数时,该函数才不存在

Code claims function does not exist only if it is called from html-set onclick event

本文关键字:函数 声明 不存在 代码 调用 html set 事件 onclick      更新时间:2023-09-26

我遇到了一个非常奇怪的问题,阻止我的代码触发JQUERY函数,但前提是该事件是在页面的html中的onclick属性标记中声明的。如果将相同的函数分配给具有javascript".click(function()…"事件的元素,那么该函数将被正确调用,并且代码基本上不会说"This event not exist!"。

我在互联网上搜索,寻找有同样问题的人,虽然有很多问题表面上看起来像我遇到的问题,但似乎没有一个能准确地解决它。

这里有一个例子:

//Delete an existing exclusion.
$.fn.deleteExclusion = function (idExclusion) {
     document.cookie = idExclusion + "=; expires=; path=/";
     $.fn.buildExclusions();
}

如果我通过说:来调用此方法

$("#someButton").click(function(){
     $.fn.deleteExclusion();
)

则该函数存在并且正确运行。

但是,如果我按如下方式分配这个函数(在页面加载时创建,作为页面html的一部分):

<a href="javascript:void(0);" onclick="$.fn.deleteExclusion();">Some Button</a>

那么当我点击该链接时,该函数就不存在了。

我公司的一个网站没有这种情况,它使用ASP.NET.aspx页面结构。然而,我正在开发一个新的MVC应用程序,这就是这种行为发生的地方。

坦率地说,我被难住了。现在,我不确定还能提供什么代码来进行演示,而不必过多地添加不必要的细节。如果你需要额外的代码来帮助我解决这个问题,请告诉我。

您需要包含Jquery

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
jQuery(document).ready(function($){
$.fn.deleteExclusion = function (idExclusion) {
     document.cookie = idExclusion + "=; expires=; path=/";
     $.fn.buildExclusions();
}
});

我们找到了一个解决方法。为了实现这一点,我们添加了:

//Set onclick events for delete exlusion anchor tag buttons created dynamically.
$(document).on("click", "a.deleteExclusion", function () {
    $.fn.deleteExclusion($(this).attr("id").replace("delete", ""));
});

这在页面加载时创建了onclick事件,但在创建元素时将其应用于元素。它允许最初在cshtml文件中创建的元素,以及动态创建的html元素,都有一个工作点击事件。