只有从html set onclick事件调用代码声明函数时,该函数才不存在
Code claims function does not exist only if it is called from html-set onclick event
我遇到了一个非常奇怪的问题,阻止我的代码触发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元素,都有一个工作点击事件。
相关文章:
- 直接在函数声明上使用function.prototype.bind
- 可以Resharper在我的javascript函数声明中添加分号
- 此行是否包含函数声明
- 函数声明与函数表达式之间的性能差异
- 为什么在javascript函数声明中使用逻辑运算符
- 函数声明未定义-原因
- JavaScript执行从函数声明开始,而不是从$(document).ready()开始
- 杰辛特 |传递默认设置 |函数声明和“this”
- 未知的 JavaScript 函数声明模式
- JavaScript 中的函数声明
- 在函数声明而不是运行时分析所有变量
- 命名函数声明有什么好处吗
- 将一个简单的函数声明形成JavaScript中的闭包
- 返回语句后的函数声明全局变量不会被覆盖
- (this)在函数声明之后
- 为什么使用 ||在变量函数声明中
- 为什么要将函数声明分配给命名变量
- 具有相同参数的 Javascript 函数声明
- 从性能的角度来看,函数声明与表达式
- 为什么 Mozilla Javascript 调试器的断点会捕捉到函数声明