jquery更改ready方法調用順序,在ready以後執行Js代碼

jquery更改ready方法調用順序,在ready以後執行Js代碼

問題描述

我想要控制Input,回車不提交表單,思路以下: javascript

$(function(){
    $("form input").on("keypress",function(event){
        if(event.keycode == 13){
            return false;
        }
    })
})

固然上面這段代碼要放是base.js(全部頁面都要引入的基礎函數)裏面,由於有好多頁面都存在這個問題. 問題來了,在某些頁面中,當執行上面的代碼時,$("form input")還不存在,,這些元素是在頁面的$(function(){})–(我把它叫作ready方法)中產生的.. 因此,如今就有一個需求 在全部的ready方法以後執行上面的方法 css

在全部的ready方法以後執行上面的方法

jQuery的ready方法以下: java

$(function(){
//....
});

或者 jquery

$(document).ready(function(){
//....
});

jQuery的方法分兩種,一種是$.extend等,另外一種是\(("button").on(...),(定義爲\).fn.on)從上面分析,ready方法應該屬於第二種 因此我打算從新ready方法 sql

重寫$.fn.ready方法

  1. easy test
$.fn.ready = function(){alert("hello,world");}

放到base.js中,發現全部頁面在加載的時候,都不執行本身的ready方法了,而是彈出了"hello,world" promise

  1. 執行頁面中的ready方法
$.fn.ready = function(func){
if(func){   //若是有本身的ready方法,
 func();    //運行該方法
}
alert("hello,world");
}

執行結果是,既執行了本身的ready方法(在裏面寫了個alert(1)作爲測試),也執行了後續方法.. 可是,頁面沒有加載出來,由於你們都知道,ready方法是當頁面加載完成纔去執行的,而如今是當運行到$(function(){})這裏的時候,就執行了,而沒有等待頁面加載.. 安全

查看$.fn.ready的源碼定義

源碼定義以下: bash

jQuery.fn.ready = function( fn ) {

        // Add the callback
        jQuery.ready.promise().done( fn );

        return this;
};

jQuery 用Deferred和promise等來控制等加載完成後執行.而done方法能夠接受多個函數. 閉包

修改本身的$.fn.ready

jQuery.fn.ready = function( fn ) {
        // Add the callback
        jQuery.ready.promise().done(fn,function(){
        $("form input").on("keypress",function(event){
            if(event.keycode == 13){
                return false;
            }
        })
    });
        return this;
};

測試,可用,順序是先執行fn(頁面中的多個ready方法),後執行本身的方法,而此時input已經建立成功了,即能訪問到了 ide

閉包,增長安全性

最終代碼以下:

(function($){
        $.fn.ready = function( fn ) {
                $.ready.promise().done(fn,function(){
                        $("form input").on("keypress",function(event){
                                if(event.keyCode == 13){
                                        return false;
                                }
                        });
                });
                return this;
        };
})(jQuery);

Created: 2016-05-04 週三 17:48

Emacs 24.5.1 (Org mode 8.2.10)

Validate

相關文章
相關標籤/搜索