java - thinkphp中U方法如何传一个动态值为参数?
程序员文章站
2022-05-31 09:45:04
...
例如
搜索
如何获取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
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变量
php渲染出这个页面的时候,U方法就已经生成链接了
请理解一个web页面的生成过程
页面加载的时候已经解析了U方法,所以动态获取的那个参数就是之后才加入到链接,这个用js的方式去获取这个参数,并动态拼凑(上面各位都贴出各种代码了我就不贴了),个人觉得这样子很繁琐, 看你上面的功能,无非就是做个搜索功能,我的实现方法如下:
单独用一个JS的函数,事件触发来拼凑a标签的URL,比如
var url = '{:u(xxxxx)}?key='+$("#keyword").val();
只能用楼上的办法,在js文件里面单独写方法来控制,因为模板方法是输出为html之前生成好了,所以没法动态改变