2012-01-18 78 views
0

我想知道如果你能告诉我一些关于在URL中传递url参数到我的jquery移动运行站点上的特定页面时我能做些什么的见解。如何在jquery mobile中正确传递url参数

所以我有这个样子内设有一个链接的生活: http://www.m.mysite.org/donate?s_src=1234&s_subsrc=12345

如果有人点击该链接,我随后被带到我的移动网站,我有一个捐款的形式。捐款表格内,我有两个隐藏字段名为

<input type="hidden" id="source" value="" /> 
<input type="hidden" id="sub_source" value="" /> 

我想抓住这些参数的值,并填补这些价值,也许空。这是我必须抓住这些参数和值的脚本:

var source = getUrlVars()["s_src"]; 
var subsourc = getUrlVars()["s_subsrc"]; 
if (source != "" && source != 'undefined' && source != null) { 
    document.getElementById('source').value = source; 
} 
if (subsourc != "" && subsourc != 'undefined' && subsourc != null) { 
    document.getElementById('sub_source').value = subsourc; 
} 

function getUrlVars() 
{ 
var vars = [], hash; 
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
for(var i = 0; i < hashes.length; i++) 
{ 
    hash = hashes[i].split('='); 
    vars.push(hash[0]); 
    vars[hash[0]] = hash[1]; 
} 
return vars; 
} 

问题是,这些值不会被应用到那些隐藏输入字段。

+0

你确定你的'getUrlVars()'函数正在工作吗? – Jivings 2012-01-18 23:45:52

+0

我创建了一个[plug-in](https://github.com/CameronAskew/jquery.mobile.paramsHandler),如果您仍然为此付出努力,那可能会对您有所帮助。也许我会改变它,但是请注意,我在我的插件中定义了一个函数''getUrlVars()'',这可能会导致函数 – 2014-04-04 21:45:14

回答

1

根据我对劳森答案的评论,你可以使用ready()函数。另外,我现在使用jQuery来设置隐藏输入的值,而不是直接使用document对象。

jQuery.ready(function() { 
    var source = getUrlVars()["s_src"]; 
    var subsourc = getUrlVars()["s_subsrc"]; 
    if (source != "" && source != 'undefined' && source != null) { 
     jQuery("#source").val(source); 
    } 
    if (subsourc != "" && subsourc != 'undefined' && subsourc != null) { 
     jQuery("#sub_source").val(subsourc); 
    } 
}); 

function getUrlVars() 
{ 
    var vars = [], hash; 
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
    for(var i = 0; i < hashes.length; i++) 
    { 
     hash = hashes[i].split('='); 
     vars.push(hash[0]); 
     vars[hash[0]] = hash[1]; 
    } 
    return vars; 
} 
1

我认为这里的问题是,您正试图在jQuery移动完全操纵DOM之前将值写入输入。尝试在你调用onload的函数中封装代码的顶部。

function onload() 
{ 
var source = getUrlVars()["s_src"]; 
var subsourc = getUrlVars()["s_subsrc"]; 

if (source != "" && source != 'undefined' && source != null) { 
document.getElementById('source').value = source; 
} 

if (subsourc != "" && subsourc != 'undefined' && subsourc != null) { 
    document.getElementById('sub_source').value = subsourc; 
} 
} 
function getUrlVars() 
{ 
var vars = [], hash; 
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
for(var i = 0; i < hashes.length; i++) 
{ 
    hash = hashes[i].split('='); 
    vars.push(hash[0]); 
    vars[hash[0]] = hash[1]; 
} 
return vars; 
} 
### 
<body onload="onload()"> 
+1

或更多jQuery精神问题,您可以使用'ready()'功能http://api.jquery.com/ready/ – dana 2012-01-19 00:09:18

+0

感谢您的回复! – TikaL13 2012-01-19 19:55:33