2013-06-12 3 views
0

jquery/phonegap으로 앱을 개발하고 있습니다. 나는 당신이 국가를 선택할 수있는 페이지를 가지고있다. 이를 바탕으로 다른 목록을 얻을 수 있습니다. 하지만이 '설정'페이지로 돌아가서 국가를 변경할 수도 있습니다. 시작하면 클릭과 같이 실행됩니다. 그러나 설정으로 돌아가서 국가를 변경하려고하면 두 번 클릭해야합니다. 해결하기가 쉽지 않을까요? 누구든지 아이디어가 있습니까?처음 클릭 한 후 버튼을 다시 실행하려면 두 번 클릭해야합니다.

<!DOCTYPE HTML> 
<html> 
<head> 
<title>The Arena App</title> 
<meta charset="UTF-8"> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
<link rel="stylesheet" href="css/jquery.mobile-1.3.1.min.css" /> 
<link rel="stylesheet" href="css/styles.css" /> 
<script src="js/jquery-1.9.1.min.js"></script> 
<script src="js/jquery.mobile-1.3.1.min.js"></script> 
<script type="text/javascript"> 
     function ProcessC(){ 
     console.log('test'); 
     var input = $('input:radio[name=country]:checked').val(); 
     if (input =='belgium') { 
      window.localStorage.setItem("country", "Belgium"); 
      document.location.href = "listarenas.html"; 
     } else if (input =='holland') { 
      window.localStorage.setItem("country", "Holland"); 
      document.location.href = "listarenas.html"; } 
     else { 
      window.localStorage.setItem("country", "all"); 
      document.location.href = "listarenas.html"; 
     } 
    } 

</script> 
</head> 

<body> 

<div data-role="page" id="countryPage"> 

    <div data-role="header" data-position="fixed"> 
     <h1>Choose Country</h1> 
    </div> 

    <div data-role="content"> 
     <form action="" data-ajax="false" id="countryp"> 
     <div data-role="fieldcontain"> 
      <fieldset data-role="controlgroup"> 
       <legend>Choose a country:</legend> 
       <input type="radio" name="country" id="all" value="all" checked="checked"> 
       <label for="all">All</label> 

       <input type="radio" name="country" id="be" value="belgium"> 
       <label for="be">Belgium</label> 

       <input type="radio" name="country" id="nl" value="holland"> 
       <label for="nl">Holland</label> 
      </fieldset> 
     </div> 
     <div data-role="fieldcontain"> 
      <input type="button" value="Go!" onclick="ProcessC();" /> 
     </div> 
     </form> 


    </div>  

</div> 


<script src="js/arenalist.js"></script> 
<script src="js/arenadetails.js"></script> 


</body> 

</html> 

EDIT1 : 두 번째로 페이지를 열면 기본 방지 기능이 작동하지 않는 것처럼 보입니다. 대신 그냥 페이지를 다시로드합니다 (예를 들어, 내가 네덜란드를 클릭하면 URL은 http://localhost/arenaapp/www/index.html?country=holland이됩니다). 그래서 내가 두 번째로 클릭 할 때 작동합니다.

EDIT2 :

<!DOCTYPE HTML> 
<html> 
<head> 
<title>The Arena App</title> 
<meta name="viewport" content="width=device-width,initial-scale=1"/> 
<link rel="stylesheet" href="css/jquery.mobile-1.3.1.min.css" /> 
<link rel="stylesheet" href="css/styles.css" /> 
</head> 

<body> 

<div id="ListArenasPage" data-role="page"> 

    <div data-role="header" data-position="fixed"> 
    <a href='index2.html' class='ui-btn-left' data-icon='settings' data-theme="a" >Countries</a> 
     <h1>The Arena App</h1> 
    </div> 

    <div data-role="content"> 
     <ul id="arenaList" data-role="listview" data-filter="true" data-filter-placeholder="Filter arenas..."></ul> 
    </div>  

</div> 

<script src="js/jquery-1.9.1.min.js"></script> 
<script src="js/jquery.mobile-1.3.1.min.js"></script> 
<script src="js/arenalist.js"></script> 
<script src="js/arenadetails.js"></script> 


</body> 

</html> 

listarenas.html 그리고 JS 파일 arenalist.js :

var serviceURL = "http://localhost/arenaapp/services/"; 

var arenas; 

$('#ListArenasPage').on('pageshow', function(event) { 
    getarenaList(); 
}); 

function getarenaList() { 
    var country = window.localStorage.getItem("country"); 
    $.getJSON(serviceURL + 'getarenas.php?id=' + country, function(data) { 
     $('#arenaList li').remove(); 
     arenas = data.items; 
     $.each(arenas, function(index, arena) { 
      $('#arenaList').append('<li><a href="arenaDetails.html?id=' + arena.id + '">' + 
        '<img src="pics/' + arena.picture + '"/>' + 
        '<h4>' + arena.arenaName + '</h4>' + '<p id="category">Club:' + arena.arenaClub + '</p>' + 
        '<p>Capacity:' + arena.arenaCapacity + '</p>' + 
        '<span class="ui-li-count">' + arena.id + '</span></a></li>'); 
     }); 
     $('#arenaList').listview('refresh'); 
    }); 
} 

LAST 나는 당신은뿐만 아니라 여기에서 도착 페이지의 코드를 게시 할 수 있습니다 편집 : 마지막 편집으로 같은 문제가있는 사람들에게 내가 큰 문제가있는 이유 중 하나는 첫 번째 코드 단편에서 볼 수 있듯이 데이터를 처리하기 전에 스크립트를 사용했다는 점입니다. role = "page". 초기 페이지 다음에 jquery를 사용하면 페이지 태그 내의 내용 만 나머지 페이지에서 실행됩니다. 따라서 코드는 jquery 아키텍처로 인해 첫 번째 인덱스 페이지 (어디에서나) 또는 데이터 역할 "페이지"다음의 다른 페이지에 있어야합니다.

를 읽으 : https://stackoverflow.com/a/8724964/2466991

+2

'var input = $ ('input : radio [name = counrty] : checked ') .Val(); ** counrty **이거나 이름은 ** 국가 **입니까? –

+0

이것이 문제인지는 모르겠지만'event.preventDefault(); 뒤에'event.stopPropagation();'을 추가해보십시오. – Dropzilla

+0

관련이 있는지는 잘 모르지만 여기에 "country"가 잘못 입력되었습니다 :'input : radio [name = counrty] : checked ' –

답변

0

는 당신이 행동의 submit 유형의 내부를 처리하려고 할 아마 안된다고 생각합니다. 정말로 당신이 말하는 것은 버튼의 클릭 핸들러를 실행하는 것입니다. form onsubmit 내부에서 처리하려고하면 아마도 불필요한 복잡성과 잠재적 인 크로스 브라우저 문제가 추가 될 것입니다.

제출 버튼을 일반적인 button 요소로 변경해보세요. 여기에 클릭 핸들러를 등록 할 곳이 있습니다. <form onsubmit=""> 태그에서 처리기를 제거하십시오.

<input type="button" value="Go!" onclick="ProcessC();" /> 

난 당신이 정말 간단한 버튼 클릭 핸들러의 기본을 방지하기 위해 필요로하지 않기 때문에 당신은 아마 event.preventDefault()을 삭제할 수 있습니다 그 시점에서도 생각합니다. 기본값은 정확히 당신이하고있는 것입니다!

+0

감사! 이제는 처음으로 나라를 선택하기 전과 같이 작동합니다. 그러나 내가 그 나라로 돌아가서 Go를 할 때 아무 일도 일어나지 않는다. onSubmit이 양식 요소에있을 때 페이지를 새로 고쳤기 때문에 이것이라고 생각합니다. 그것이 두 번째로 효과가 있었던 이유입니다. 그래서 나는 그 질문을 '처음 만 해고'라고 다시 말해야한다고 생각합니다. – Trains712

+0

'ProcessC'의 시작 부분에'alert' 또는'console.log'를 넣을 수 있습니까? 이벤트 핸들러가 호출되지 않았는지, 핸들러가 아무 것도하지 않는다는 것을 알아내는 것이 궁금합니다 (로직의 결함으로 인해). – mclark1129

+0

@ user2466991 또한'preventDefault()'를 완전히 제거 했습니까? – mclark1129

관련 문제