您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么向jquery函數傳遞多個參數”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么向jquery函數傳遞多個參數”吧!
// Deferred helper
when: function( subordinate ) {
var i=0,
resolveValues = core_slice.call( arguments ),
length =resolveValues.length, //參數個數
//統計沒有被解決的成員,
//如果參數個數不為1,則remaining為參數個數,
//如果參數個數為1且參數是 Deferred(延遲)對象則remaining為參數個數1;否則為0
remaining=length !==1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
//初始化主延時對象,如果參數本身是一個延時對象則用參數即可,否則新建。
deferred=remaining===1 ? subordinate : jQuery.Deferred(),
// Update函數處理resolve和progress的值
updateFunc=function( i, contexts, values ) {
return function( value ) {
contexts[ i ] =this;
values[ i ] =arguments.length > 1 ? core_slice.call( arguments ) : value;
//成員延時(Deferred)對象生成進度通知的時候主延時(Deferred)對象調用進行中的回調
//后面代碼。progress( updateFunc( i, progressContexts, progressValues),往進度回調列表添加函數的時候第三個參數就是progressValues if( values=== progressValues ) {
//調用進行中的回調(progressCallbacks )
deferred.notifyWith( contexts, values );
//否則成員延時(Deferred)對象解決的時候才進入該分支判斷
//需要等待解決的延時(Deferred)對象數量減一,
//判斷還有沒有需要等待解決的延時(Deferred)對象,如果有,則判斷失敗返回
//如果沒有則進入分支子代碼,執行主延時(Deferred)對象解決deferred.resolveWith(…)
} else if ( !( --remaining ) ) {
//最終執行到此步的時候values已經變成所有成員延時(Deferred)對象resolve的參數序列
deferred.resolveWith( contexts, values );
}
};
},
progressValues, progressContexts, resolveContexts;
//對于沒有參數或是有唯一一個非延時對象的,直接認為resolved,也就是后面if ( !remaining ) 分支的處理
//對于參數就是一個延時對象的直接將這個延時對象的deferred.promise()返回即可
//對于參數多于一個的才進入該分支,添加監聽器監聽成員被解決
if ( length > 1 ) {
progressValues =new Array( length );
progressContexts =new Array( length );
resolveContexts =new Array( length );
for ( ; i < length; i++ ) {
//遍歷參數成員,只有成員是延時(Deferred)對象的才需要監聽器
if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
resolveValues[ i ].promise()
。done( updateFunc( i, resolveContexts, resolveValues ) )
//如果有一個成員延時(Deferred)對象拒絕時,則整個主延時(Deferred)對象直接拒絕
。fail( deferred.reject )
。progress( updateFunc( i, progressContexts, progressValues ) );
//非延時(Deferred)對象的直接認為已解決,需要等待解決的延時(Deferred)對象數量減一
} else {
--remaining;
}
}
}
//如果沒有傳遞參數或唯一一個參數且不是一個延時對象,直接解決主延時對象即可
if ( !remaining ) {
deferred.resolveWith( resolveContexts, resolveValues );
}
return deferred.promise();
}
感謝各位的閱讀,以上就是“怎么向jquery函數傳遞多個參數”的內容了,經過本文的學習后,相信大家對怎么向jquery函數傳遞多個參數這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。