• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-25) 39次浏览 已收录 0个评论
文章目录[隐藏]

例如

<code>搜索</code>

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

回复内容:

例如

<code>搜索</code>

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

参照 oneThink 中对一些数据的处理

1.在页面先初始化各全局 js 变量

<code class="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')}"]        }})();</code>

2.封装各种处理方法 Think.js

<code class="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(<b style="color:transparent">来&源gao@dai!ma.com搞$代^码%网</b><img>搞gaodaima代码</img>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);</code>

3.使用

<code class="js">// 生成连接function editRule(id,status){    window.location.href = Think.U('Admin/AuthManager/editRule','id='+id+'&status='+status);}// 设置表单值,可以为ID、Class、NameThink.setValue('username','张三');</code>

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

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

php渲染出这个页面的时候,U方法就已经生成链接了
请理解一个web页面的生成过程

页面加载的时候已经解析了U方法,所以动态获取的那个参数就是之后才加入到链接,这个用js的方式去获取这个参数,并动态拼凑(上面各位都贴出各种代码了我就不贴了),个人觉得这样子很繁琐, 看你上面的功能,无非就是做个搜索功能,我的实现方法如下:

<code>         搜 索    <script>    $("#search").click(function(){        $("form").submit();    });</script></code>

单独用一个JS的函数,事件触发来拼凑a标签的URL,比如

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

只能用楼上的办法,在js文件里面单独写方法来控制,因为模板方法是输出为html之前生成好了,所以没法动态改变


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java – thinkphp中U方法如何传一个动态值为参数?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址