java - thinkphp中U方法如何傳一個動態值為參數?

來源:互聯網
上載者:User
關鍵字 thinkphp php java
例如

搜尋

如何擷取input文字框的值並放入a標籤的參數裡。
前提是在thinkphp的U方法裡

回複內容:

例如

搜尋

如何擷取input文字框的值並放入a標籤的參數裡。
前提是在thinkphp的U方法裡

參照 oneThink 中對一些資料的處理

1.在頁面先初始化各全域 js 變數

(function(){        var ThinkPHP = window.Think = {            "ROOT"   : "__ROOT__", //當前網站地址            "APP"    : "__APP__", //當前項目地址            "PUBLIC" : "__PUBLIC__", //項目公用目錄位址            "DEEP"   : "{:C('URL_PATHINFO_DEPR')}", //PATHINFO分割符            "MODEL"  : ["{:C('URL_MODEL')}", "{:C('URL_CASE_INSENSITIVE')}", "{:C('URL_HTML_SUFFIX')}"],            "VAR"    : ["{:C('VAR_MODULE')}", "{:C('VAR_CONTROLLER')}", "{:C('VAR_ACTION')}"]        }})();

2.封裝各種處理方法 Think.js

/* 擴充ThinkPHP對象 */(function($){    /**     * 擷取ThinkPHP基礎配置     * @type {object}     */    var ThinkPHP = window.Think;    /* 基礎對象檢測 */    ThinkPHP || $.error("ThinkPHP基礎配置沒有正確載入!");    /**     * 解析URL     * @param  {string} url 被解析的URL     * @return {object}     解析後的資料     */    ThinkPHP.parse_url = function(url){        var parse = url.match(/^(?:([a-z]+):\/\/)?([\w-]+(?:\.[\w-]+)+)?(?::(\d+))?([\w-\/]+)?(?:\?((?:\w+=[^#&=\/]*)?(?:&\w+=[^#&=\/]*)*))?(?:#([\w-]+))?$/i);        parse || $.error("url格式不正確!");        return {            "scheme"   : parse[1],            "host"     : parse[2],            "port"     : parse[3],            "path"     : parse[4],            "query"    : parse[5],            "fragment" : parse[6]        };    }    ThinkPHP.parse_str = function(str){        var value = str.split("&"), vars = {}, param;        for(val in value){            param = value[val].split("=");            vars[param[0]] = param[1];        }        return vars;    }    ThinkPHP.parse_name = function(name, type){        if(type){            /* 底線轉駝峰 */            name.replace(/_([a-z])/g, function($0, $1){                return $1.toUpperCase();            });            /* 首字母大寫 */            name.replace(/[a-z]/, function($0){                return $0.toUpperCase();            });        } else {            /* 大寫字母轉小寫 */            name = name.replace(/[A-Z]/g, function($0){                return "_" + $0.toLowerCase();            });            /* 去掉首字元的底線 */            if(0 === name.indexOf("_")){                name = name.substr(1);            }        }        return name;    }    //scheme://host:port/path?query#fragment    ThinkPHP.U = function(url, vars, suffix){        var info = this.parse_url(url), path = [], param = {}, reg;        /* 驗證info */        info.path || $.error("url格式錯誤!");        url = info.path;        /* 組裝URL */        if(0 === url.indexOf("/")){ //路由模式            this.MODEL[0] == 0 && $.error("該URL模式不支援使用路由!(" + url + ")");            /* 去掉右側分割符 */            if("/" == url.substr(-1)){                url = url.substr(0, url.length -1)            }            url = ("/" == this.DEEP) ? url.substr(1) : url.substr(1).replace(/\//g, this.DEEP);            url = "/" + url;        } else { //非路由模式            /* 解析URL */            path = url.split("/");            path = [path.pop(), path.pop(), path.pop()].reverse();            path[1] || $.error("ThinkPHP.U(" + url + ")沒有指定控制器");            if(path[0]){                param[this.VAR[0]] = this.MODEL[1] ? path[0].toLowerCase() : path[0];            }            param[this.VAR[1]] = this.MODEL[1] ? this.parse_name(path[1]) : path[1];            param[this.VAR[2]] = path[2].toLowerCase();            url = "?" + $.param(param);        }        /* 解析參數 */        if(typeof vars === "string"){            vars = this.parse_str(vars);        } else if(!$.isPlainObject(vars)){            vars = {};        }        /* 解析URL內建的參數 */        info.query && $.extend(vars, this.parse_str(info.query));        if(vars){            url += "&" + $.param(vars);        }        if(0 != this.MODEL[0]){            url = url.replace("?" + (path[0] ? this.VAR[0] : this.VAR[1]) + "=", "/")                     .replace("&" + this.VAR[1] + "=", this.DEEP)                     .replace("&" + this.VAR[2] + "=", this.DEEP)                     .replace(/(\w+=&)|(&?\w+=$)/g, "")                     .replace(/[&=]/g, this.DEEP);            /* 添加偽靜態尾碼 */            if(false !== suffix){                suffix = suffix || this.MODEL[2].split("|")[0];                if(suffix){                    url += "." + suffix;                }            }        }        url = this.APP + url;        return url;    }    /* 設定表單的值 */    ThinkPHP.setValue = function(name, value){        var first = name.substr(0,1), input, i = 0, val;        if(value === "") return;        if("#" === first || "." === first){            input = $(name);        } else {            input = $("[name='" + name + "']");        }        if(input.eq(0).is(":radio")) { //選項按鈕            input.filter("[value='" + value + "']").each(function(){this.checked = true});        } else if(input.eq(0).is(":checkbox")) { //複選框            if(!$.isArray(value)){                val = new Array();                val[0] = value;            } else {                val = value;            }            for(i = 0, len = val.length; i < len; i++){                input.filter("[value='" + val[i] + "']").each(function(){this.checked = true});            }        } else {  //其他表單選項直接設定值            input.val(value);        }    }})(jQuery);

3.使用

// 產生串連function editRule(id,status){    window.location.href = Think.U('Admin/AuthManager/editRule','id='+id+'&status='+status);}// 設定表單值,可以為ID、Class、NameThink.setValue('username','張三');

4.具體可以下載oneThink後。開啟 /Public/static/Think.js

希望可以幫到你,以上代碼為oneThink封裝。我只是一個搬運工,最後,在頁面中ThinkPHP本身的U方法是無法動態去傳遞一些JS變數

php渲染出這個頁面的時候,U方法就已經產生連結了
請理解一個web頁面的產生過程

頁面載入的時候已經解析了U方法,所以動態擷取的那個參數就是之後才加入到連結,這個用js的方式去擷取這個參數,並動態拼湊(上面各位都貼出各種代碼了我就不貼了),個人覺得這樣子很繁瑣, 看你上面的功能,無非就是做個搜尋功能,我的實現方法如下:

   

單獨用一個JS的函數,事件觸發來拼湊a標籤的URL,比如

var url = '{:u(xxxxx)}?key='+$("#keyword").val();

只能用樓上的辦法,在js檔案裡面單獨寫方法來控制,因為模板方法是輸出為html之前產生好了,所以沒法動態改變

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.