我已经看到许多使用参数函数参数的JQuery函数。即使我使用它们,如果不知道后端如何工作,感觉相当不完整。 例如,让我们使用click方法:
$("p").click(function(event){
event.preventdefault();
alert("testing 123");
});
在此代码中,如果我使用了,"这个"在方法内部,它会给我" p"元素本身。 但是,我无法弄清楚"事件"参数得到了什么。 不应该有像
这样的代码位的地方var event = blah blah;
以便event参数有一些值?
我按f12点击了实际的JQuery文件,然后进入像这样的函数
jQuery.fn[ name ] = function( data, fn ) {
return arguments.length > 0 ?
this.on( name, null, data, fn ) :
this.trigger( name );
};
我看不到填充的任何地方或为名为&#34的参数分配内容;事件"
我对$ .ajax请求也有同样的问题,
$.ajax({
type: "POST",
url: url,
async: false,
success: function (data) { }
});
可以看到有一些地方正在加载"数据"在"数据"参数,实际数据填写的方式和位置?我们何时加载实际数据。 我看到了一些类似的问题。
答案 0 :(得分:1)
声明发生在函数参数本身。
在函数参数中声明data
,event
或任何您想要调用的内容(任何单词都可以使用),实际上是var data = ...
语句。
在事件处理程序的实例中,浏览器将event
传递给锁定该事件的任何函数。在ajax调用的情况下,如@Alec所说,这是从服务器返回的数据。
答案 1 :(得分:1)
jQuery基本上是一个返回带有许多方法的对象的包装器。其中大多数都不是那么简单,如果你想更深入地了解,除了使用控制台和浏览源代码之外你没有太多选择:https://code.jquery.com/jquery-1.12.4.js。理想情况下,使用未压缩的版本。对于某些方法,可能需要很长时间才能找到它的底部。 Click回调的工作方式隐藏得很深。
你可以这样找到:
在控制台中,输入$(“p”)。单击。你会得到:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
源于此处的源代码:
ƒ ( 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 )
是你的jQuery对象$('p'),this
是'click',{ {1}}是你的功能(事件)。所以到name
:
data
这里,this.on()
不是全局的,所以它在jQuery的闭包中,所以回到你可以找到的源代码:
console.log($('p').on);
ƒ ( types, selector, data, fn ) {
return on( this, types, selector, data, fn );
}
其中function on
是您的jQuery对象 function on( elem, types, selector, data, fn, one ) {
...
,elem
是'click',$('p')
为空,types
是您的selector
和data
为空。这导致:
function(e)
所以你可以找到:
fn
您可以在哪里找到elem.each( function() {
jQuery.event.add( this, types, fn, data, selector );
} );
:
jQuery.event = {
global: {},
add: function( elem, types, handler, data, selector ) {
...
在addEventListener
上,回调具有elem.addEventListener( type, eventHandle, false );
参数,即原生javascript。在jQuery中,回调是addEventListener
,所以让我们找到这个:
event
所以它返回函数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
那么这个event.fix是什么:
dispatch
在这里找到
dispatch: function( event ) {
// Make a writable jQuery.Event from the native event object
event = jQuery.event.fix( event );
...
定义作为 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 ) {
...
的位置。您可以通过在event
上添加属性来测试它。像这样举例如:
click
因此,总而言之,函数(事件)中的事件是jQuery.Event的一个实例。
见
jQuery.Event.prototype
jQuery.Event.prototype.prop = 'newProp';
对于Ajax来说,它可能更简单一点,但同样,如果你想要确切地知道,除了源代码之外,你可以做的事情不多。
答案 2 :(得分:0)
关于您的第一个问题,关于event
参数,event
是您的点击。它永远不会被显式声明为普通变量。它只是一个参数,在您的示例中,单击是事件。
在参考您的ajax问题时,data
参数是成功发布后从您的后端返回的内容。例如,我使用ajax调用从我的前端发送一些信息。我的后端然后使用该信息将数据发送回success: function(data)
内的前端,如JSON。 JSON将是data
参数。