2012-01-18 5 views
0

jquery 모바일 실행 사이트의 특정 페이지에 URL의 URL 매개 변수를 전달할 때 수행 할 수있는 것에 대해 어느 정도 통찰력을 줄 수 있는지 궁금합니다. jquery 모바일에서 url 매개 변수를 올바르게 전달하는 방법

그래서 나는 다음과 같이 사이트 A의 링크 생활이 : 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

+0

아직까지 고민 중이라면 [플러그인] (https://github.com/CameronAskew/jquery.mobile.paramsHandler)을 만들어 도움을받을 수 있습니다. 어쩌면 내가 바꾸 겠지만 함수에 문제를 일으킬 수있는 플러그인''getUrlVars()''을 정의한다. –

답변

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

+0

답변 해 주셔서 감사합니다! – TikaL13

관련 문제