为什么要将JavaScript包装成这样;(函数($){…JavaScript代码..})(jQuery)&引用;?

为什么要将JavaScript包装成这样;(函数($){…JavaScript代码..})(jQuery)&引用;?,javascript,jquery,html,asp.net-mvc-5,Javascript,Jquery,Html,Asp.net Mvc 5,我使用mvc5。不要在测试中包含jQuery。 _Layout.cshtml: @RenderBody() 有些东西(可能是MVC5)为您包装了代码,但有充分的理由。在指向全局声明函数的元素上放置onclick处理程序是90年代编写JS的方式 要解决此问题,请在按钮上添加id属性,然后删除内联事件处理程序: <button id="mybutton"> $('#mybutton').on('click', function () { alert("I am working

我使用mvc5。不要在测试中包含jQuery。 _Layout.cshtml:


@RenderBody()
有些东西(可能是MVC5)为您包装了代码,但有充分的理由。在指向全局声明函数的元素上放置
onclick
处理程序是90年代编写JS的方式

要解决此问题,请在按钮上添加
id
属性,然后删除内联事件处理程序:

<button id="mybutton"> 
$('#mybutton').on('click', function () {
  alert("I am working");
});
或者,由于您在后面的注释中提到有一个循环生成这些元素,因此请改用
数据-
属性:

<button class="myclass" data-id="...">

函数myFunction(){
警报(“其正在工作”);
}
点击我

这会奏效的。cheers

内联函数应该在全局范围内才能访问。不要将函数
定义
包装在
iLife
中,内联函数是一种非常过时的处理事件的方式,特别是因为您已经承诺使用jQuery,该特定函数是执行jQuery的
document.ready
事件处理程序的方法之一,确保在执行代码之前完全加载DOM。通常,在需要在脚本中引用DOM元素的情况下执行此操作,因此在执行此操作之前,请确保它们存在。要解决此问题,只需将
myFunction()
移到该匿名函数之外,使其具有全局作用域。;不要使用Instinic事件属性(它依赖于非常糟糕的全局属性),谢谢你的回答。在这种情况下,我有一个错误;ReferenceError:jQuery未定义}(jQuery)@Iva所以您需要用
标记加载
jQuery
,我想使用内联函数,因为我在循环中的服务器上添加了这种代码和平。这个问题在我看来很愚蠢。我想我错过了一些非常简单的东西。@Alnitak他在问他的函数是如何包装在
(function($){…})(jQuery)中的$('.myclass').on('click', function() {
    var id = $(this).data('id');
    ...
});
<script>
function myFunction() {
alert("its is working");
}
</script>
<button onclick="myFunction()">Click me</button>