JQuery数据来自哪里?

时间:2018-04-24 19:57:25

标签: javascript jquery function parameters

我已经看到许多使用参数函数参数的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) {  }
});

可以看到有一些地方正在加载"数据"在"数据"参数,实际数据填写的方式和位置?我们何时加载实际数据。 我看到了一些类似的问题。

3 个答案:

答案 0 :(得分:1)

声明发生在函数参数本身。

在函数参数中声明dataevent或任何您想要调用的内容(任何单词都可以使用),实际上是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是您的selectordata为空。这导致:

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; }; ,其中dispatchjQuery.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参数。

相关问题