Javascript JQuery数据来自哪里?
我见过许多使用参数的JQuery函数。尽管我使用了它们,但在不知道后端如何工作的情况下,它感觉相当不完整。 例如,让我们使用单击方法:Javascript JQuery数据来自哪里?,javascript,jquery,function,parameters,Javascript,Jquery,Function,Parameters,我见过许多使用参数的JQuery函数。尽管我使用了它们,但在不知道后端如何工作的情况下,它感觉相当不完整。 例如,让我们使用单击方法: $("p").click(function(event){ event.preventdefault(); alert("testing 123"); }); 在这段代码中,如果我在方法中使用“this”,它将给我“p”元素本身。 但是,我无法理解“event”参数被分配了什么。 难道不应该有这样一个地方吗 var event = blah b
$("p").click(function(event){
event.preventdefault();
alert("testing 123");
});
在这段代码中,如果我在方法中使用“this”,它将给我“p”元素本身。
但是,我无法理解“event”参数被分配了什么。
难道不应该有这样一个地方吗
var event = blah blah;
所以事件参数有一些值
我通过按f12键单击了实际的JQuery文件,它将转到如下函数
jQuery.fn[ name ] = function( data, fn ) {
return arguments.length > 0 ?
this.on( name, null, data, fn ) :
this.trigger( name );
};
我看不到该填充的任何位置,也看不到为名为“event”的参数赋值的位置
我对$.ajax请求也有同样的问题
$.ajax({
type: "POST",
url: url,
async: false,
success: function (data) { }
});
可见,在“数据”参数中有一个加载“数据”的地方,实际数据是如何以及在哪里填充的?我们什么时候加载实际数据。
我看到了一些类似的问题。关于您的第一个问题,关于
事件
参数,事件
是您的单击。它永远不会像普通变量那样显式声明。它只是一个参数,在您的示例中,单击就是事件
关于ajax问题,
数据
参数是成功发布后从后端返回的内容。例如,我使用ajax调用从前端发送一些信息。然后,我的后端使用该信息将数据发送回success:function(data)
中的前端,就像JSON一样。JSON将是数据
参数。声明发生在函数参数本身中
声明数据
,事件
,或在函数参数内调用它的任何内容(任何单词都可以),实际上就是var data=…
语句
在事件处理程序的实例中,
event
由浏览器传递给锁定该事件的任何函数。在ajax调用的情况下,正如@Alec所说,这是从服务器返回的数据。jQuery基本上是一个使用许多方法返回对象的包装器。其中大多数都不是那么简单,如果您想更深入地理解,除了使用控制台和查看您可以在此处找到的源代码之外,您没有很多选择:。理想情况下,使用未压缩版本。对于某些方法,可能需要相当长的时间才能弄清问题的真相。单击回调的工作方式隐藏得相当深
您可以通过以下方式找到它:
在控制台中,输入$(“p”)。单击。您将获得:
ƒ ( data, fn ) {
return arguments.length > 0 ?
this.on( name, null, data, fn ) :
this.trigger( name );
}
这在源代码中来自这里:
jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error contextmenu" ).split( " " ),
function( i, name ) {
// Handle event binding
jQuery.fn[ name ] = function( data, fn ) {
return arguments.length > 0 ?
this.on( name, null, data, fn ) :
this.trigger( name );
};
} );
因为您至少有一个参数,所以它运行:this.on(name,null,data,fn)
,其中this
是您的jQuery对象$('p'),name
是'click',data
是您的函数(事件)。所以在this.on()
上:
在这里,上的函数不是全局函数,因此它在jQuery的闭包中,因此回到源代码,您可以在其中找到:
function on( elem, types, selector, data, fn, one ) {
...
jQuery.event = {
global: {},
add: function( elem, types, handler, data, selector ) {
...
其中elem
是jQuery对象$('p')
,types
是'click',selector
为空,data
是您的函数(e)
,fn
为空。这导致:
elem.each( function() {
jQuery.event.add( this, types, fn, data, selector );
} );
因此,您可以找到:
function on( elem, types, selector, data, fn, one ) {
...
jQuery.event = {
global: {},
add: function( elem, types, handler, data, selector ) {
...
您可以在其中找到一个addEventListener
:
elem.addEventListener( type, eventHandle, false );
在addEventListener
上,回调具有event
参数,该参数是本机javascript。在jQuery中,回调是eventHandle
,因此让我们找到这个:
eventHandle = elemData.handle = function( e ) {
// Discard the second event of a jQuery.event.trigger() and
// when an event is called after a page has unloaded
return typeof jQuery !== "undefined" &&
( !e || jQuery.event.triggered !== e.type ) ?
jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
undefined;
};
因此它返回函数dispatch
,现在回调如下:
jQuery.event.dispatch.apply(eventHandle.elem,arguments)
,其中arguments
是e
(原始addEventListener
事件)。因此,请查找调度
:
dispatch: function( event ) {
// Make a writable jQuery.Event from the native event object
event = jQuery.event.fix( event );
...
那么这是什么event.fix:
fix: function( event ) {
if ( event[ jQuery.expando ] ) {
return event;
}
// Create a writable copy of the event object and normalize some properties
var i, prop, copy,
type = event.type,
originalEvent = event,
fixHook = this.fixHooks[ type ];
在这里你可以找到
event = new jQuery.Event( originalEvent );
jQuery.Event = function( src, props ) {
...
其中定义了作为单击的参数传递的事件
。您可以通过在jQuery.Event.prototype
上添加属性来测试它。例如:
jQuery.Event.prototype.prop = 'newProp';
总之,函数中的事件(event)是jQuery.event的一个实例
看
console.log($('p')。单击);
console.log($('p').on);
console.log(jQuery.Event)
jQuery.Event.prototype.prop='test';
$('p')。单击(函数(事件){console.log(event.prop)})代码>
测试
查看:(投票率最高的答案)和可能的重复