많은 코드를 제공하기 전에 먼저 할 일이 가능한지 알아야합니다.양식 데이터를 사용하여 웹 페이지를 업데이트하십시오.
나는 JavaScript & JavaScript를 사용하여 PIG라고 부르는 주사위 게임의 웹 기반 버전을 만들었습니다. 사용자는 기본 페이지의 "설정"버튼을 클릭하여 게임 설정 중 일부를 변경할 수 있습니다. 이 버튼은 HTML 양식()을 포함하는 모달 창을 가져옵니다. 사용자가 입력하고 제출하는 데이터를 사용하여 게임의 기본 페이지에있는 다양한 설정을 업데이트하고 싶습니다.
자바 스크립트를 사용하여 유효성 검사 논리를 직접 복사하지 않고 기본 HTML5 양식 유효성 검사 기능을 사용하기를 원했기 때문에 HTML5 양식을 사용하기로했습니다.
그래서 내 접근 방식은 제출시 양식에서 데이터를 가져 오기 위해 자바 스크립트를 사용하는 것이 었습니다. 이 작업을 수행하는 두 가지 다른 방법을 시도 : 태그에서 "onsubmit = function getSettings()"사용 2) onclick = "getSettings()"이있는 양식에 제출 단추 사용.
두 가지 방법을 사용하면 제출시 양식의 모든 값을 성공적으로 가져올 수 있었고 getSettings() 함수를 종료 할 때 gettSettings() 함수를 사용하여 주요 게임 페이지를 성공적으로 채울 수있었습니다. 내가 업데이트 한 웹 페이지 값은 그대로 두지 않습니다 ... 내가 사용하는 두 가지 방법 중 어느 것에 관계없이 원래 값으로 되돌립니다.
getSettings() 메서드의 마지막 문에서 중단 점을 설정하면 주 페이지의 모든 값이 채워진 값을 반영하도록 업데이트되어 있기 때문에 값이 성공적으로 업데이트 된 것을 알고 있습니다. 양식 ... 그래서 나는 모든 데이터를 성공적으로 잡아서 메인 페이지를 그 값으로 업데이트한다는 것을 알고있다.
웹 페이지에서 성공적으로 변경 한 값이 getSettings() 함수를 종료 할 때 원래 값으로 되돌려 놓는 이유에 대해 의아하게 생각합니다.
아마도 내가하려는 일을 수행 할 수 없습니까? 그리고 만약 내가 알 수 없다면 누가 원래 값으로 되돌리기 전에 값이 성공적으로 변경되었는지 알 수 있습니다. 내가 뭘 놓치고 있니?
다시 "기본"HTML5 양식 유효성 검사 기능을 활용할 수 있도록 양식을 사용하고 제출시 데이터를 수집합니다.
감사합니다.
***** 편집은 모달 폼에 대한 코드 HTML 코드를 코드 여기 *******
의 주요 적용 분야입니다 추가하려면 : 여기
<form name="config-settings" onsubmit="getSettings()">
<!-- <form name="config-settings">-->
<span class="errMsg"></span>
<div class="row clearfix">
<div>
<label>Player 1:</label>
</div>
<div>
<input type="text" name="input-name-0" id="input-name-0" maxlength="10" placeholder="Enter name" pattern="^\S+$">
</div>
</div>
<div class="row clearfix">
<div>
<label>Player 2:</label>
</div>
<div>
<input type="text" name="input-name-1" id="input-name-1" maxlength="6" placeholder="Enter name" pattern="^\S+$">
</div>
</div>
<div class="row clearfix">
<div>
<label>Winning Score:</label>
</div>
<div>
<input type="number" name="winning-score" id="winning-score" default="100" placeholder="Enter winning score">
</div>
</div>
<div class="row clearfix">
<div>
<label>Number of Dice:</label>
</div>
<div>
<select name="diceValues" id="dice-value">
<option value=""> - Select - </option>
<option value="dice-1">One Dice</option>
<option value="dice-2">Two Dice</option>
</select>
</div>
</div>
<!-- Below is alt method I used to submit form..yields same results -->
<!-- <input type="submit" value="Submit" onclick="getSettings()">-->
<input type="submit" value="Submit">
</form>
글로벌 변수 정의 및 방법) (getSettings에서 사용 : 여기
// Global variables
var scores, roundScore, activePlayer, gamePlaying, gamesWonCount, playerNames, winningScore, numOfDice, matchScore, msgs;
var player0, player1, score;
var player0Field = document.getElementById('name-0');
var player1Field = document.getElementById('name-1');
var scoreField = document.getElementById('winScore');
설정을 포함하는 설정 모달 창이 나타납니다 메인 웹 페이지에서 설정 버튼에 대한 리스너이다가 형성 :
//*********************************************************
// Open Settings Modal Windows
//*********************************************************
document.querySelector('.btn-settings').addEventListener('click', function() {
// Settings can't be changed if game is actively underway
if (!gamePlaying || roundScore === 0) {
document.querySelector('#modal-settings').style.display = 'block';
} else {
// Make error message visible
msgs.style = 'block';
// Create message to indicate settings successfully updated
msgs.textContent = "Settings can't be updated during game";
msgs.style.backgroundColor = 'pink';
fadeOut(msgs);
}
});
다음은 getSettings() javaScript 함수입니다 (참고 :이 함수에는 지역 변수가 정의되어 있지 않습니다 ... 모두 전역 값 (javaScript app의 처음 몇 줄)으로 정의됩니다.
function getSettings() {
// Alternative call if I want this function to be called via eventListner
//document.querySelector('.btn-save').addEventListener('click', function() {
console.log("getSettings method called");
player0 = document.forms["config-settings"]["input-name-0"].value;
player1 = document.forms["config-settings"]["input-name-1"].value;
score = document.forms["config-settings"]["winning-score"].value;
// Reset msgs so they will be displayed each time
msgs.style = 'block';
playerNames[0] = player0;
player0Field.innerHTML = playerNames[0];
playerNames[1] = player1;
player1Field.textContent = playerNames[1];
// Set Winning score on UI to value on form
scoreField.textContent = score;
// numOfDice = document.getElementById('dice-value').value;
// Create message to indicate settings successfully updated
msgs.textContent = "Successfully updated settings";
msgs.style.backgroundColor = 'lightgreen';
fadeOut(msgs);
document.querySelector('#modal-settings').style.display = 'none';
}
Nelutu, thanks. 감사합니다. 이에 대한 대답은 다음과 같습니다. 1) HTML 유효성 검증과 관련하여. 이것은 단지 장난감 응용 프로그램이며 중요한 정보는 저장되거나 전송되지 않으므로 걱정하지 않습니다. 2) getSettings() - 양식에 입력 된 값을 가져오고 기본 페이지의 관련 값을 업데이트합니다. 3) HTML5 유효성 검사를 활용하는 양식 제출 옵션 만 사용했습니다 .AFAIK 양식을 제출하여 양식을 활용해야합니다. 4) getSettings() 메서드에서 로컬 변수를 사용하고 있지 않습니다. 범위 지정 문제를 특별히 피하기 위해 전역 변수입니다. 건배 – user2101068
Nelutu, fyi ... 내 코드를 게시하기 전에 문제가 범위와 관련되어 있으므로 해당 정의를 내 JavaScript 시작 부분으로 이동하여 전역 변수 getSettings()에서 모든 지역 변수를 만들었습니다. 파일 ... 불행히도 그건 내 문제를 해결하지 못했습니다. 어쩌면 여전히 어떤 유형의 범위 지정 문제가있을 수 있지만 그렇다면이 문제를 제거하기 위해 수행 한 작업을 수행했습니다. 아마도 내가 수행해야 할 작업이 더있을 수 있습니다. – user2101068