开发者社区> 问答> 正文

thinkphp中U方法如何传一个动态值为参数?

已解决

例如
`

搜索
`
如何获取input文本框的值并放入a标签的参数里。
前提是在thinkphp的U方法里

展开
收起
河南 2016-04-10 17:35:12 5334 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    参照 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、Name
    Think.setValue('username','张三');

    4.具体可以下载oneThink后。打开 /Public/static/Think.js

    希望可以帮到你,以上代码为oneThink封装。我只是一个搬运工,最后,在页面中ThinkPHP本身的U方法是无法动态的去传递一些JS变量

    2019-07-17 18:40:25
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载