J'ai un problème JS et il se peut que je sois bloqué, mais peut-être que l'un de vous pourrait m'aider.
J'ai l'index suivant. html:
function changeYear(){
var year = document.getElementById("year").innerHTML;
var year = year-1;
document.getElementById("year").innerHTML = year;
}
function changeYear2(){
var year2 = document.getElementById("year").innerHTML;
console.log(year2);
console.log(year2+1);
year2 = year2+1;
console.log(year2);
document.getElementById("year").innerHTML = year2;
}
qui charge init (). Cette fonction contient le code suivant:
function init() {
var months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"];
let monthsextension = ["nothing"];
var months2 = monthsextension.concat(months);
today = new Date();
var month2 = today.getMonth();
var year = today.getFullYear();
document.getElementById("month").innerHTML = months[month2];
document.getElementById("year").innerHTML = year;
displayC();
}
la fonction dispayC, a deux fonctions pour décompter ou décompter l'année:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Calendar</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="stylesheets/base.css">
<link rel="stylesheet" href="stylesheets/content.css">
<link rel="stylesheet" href="stylesheets/calendar.css">
<script
type="application/javascript"
src="scripts/try.js">
</script>
<script src="scripts/jquery-3.3.1.min.js"></script>
</head>
<body
onload="init()">
<div id="content">
<div class="year">
<ul>
<li id="year">year</li>
<li class="prev" id="prevmonth" onclick="changeYear()">❮</li>
<li class="next" id="nextmonth" onclick="changeYear2()">❯</li>
</ul>
</div>
<hr>
<div class="month">
<ul>
<li id="month">month</li>
<li class="prev" id="prevyear" onclick="changeMonth()">❮</li>
<li class="next" id="prevyear" onclick="changeMonth2()">❯</li>
</ul>
</div>
</div>
<div id="calendar">
<table id="tablecalendar">
</table>
</div>
</body>
</html>
maintenant, la fonction "changeYear" fonctionne comme je le voudrais, mais "changeYear2" n'ajoute pas 1 à l'année, mais ajoute le chiffre un à l'année.
Exemple:
«2019» devient «20191»
avec un deuxième clic sur la flèche du compteur, il devient "201911"
Comment se fait-il que je puisse soustraire mais ne pas ajouter à l'année?
J'espère que ce n'est pas trop de code, j'essaye de le réduire autant que possible.
4 Réponses :
L'opérateur - contraint les opérandes en nombre (il n'y a pas de soustraction de chaînes), l'opérateur + ne le fait pas (car pour les chaînes, + signifie concaténation).
console.log("7" - "2");
console.log("7" + "2");
parseInt que innerHTML , et cela fonctionnera.
dans var year2 = document.getElementById ("year"). innerHTML;
changez-le en
var year2 = parseInt (document.getElementById ("year"). innerHTML);
L'année2 est définie par défaut comme une chaîne qui, lorsque vous y ajoutez le nombre, l'ajoute simplement à la chaîne. Vous devez convertir la chaîne en un nombre via parseInt () (ou parseFloat (), etc.).
Le HTML n'a qu'un seul type de données: les chaînes. Lorsque vous faites ceci:
Please enter a date (mm/dd/yyyy): <input> <button>Make Date</button> <div></div>
Vous ne créez pas d'objet Date en JavaScript, vous créez une chaîne. Donc, quand vous faites ensuite ceci:
let dateString = document.querySelector("input");
let btn = document.querySelector("button");
let output= document.querySelector("div");
btn.addEventListener("click", function(){
// All we have at this point is a string
console.log(dateString.value, typeof dateString.value);
// Create new date based on string
let actualDate = new Date(dateString.value);
console.log(actualDate, typeof actualDate);
// Adjust the year portion of the date
actualDate.setYear(actualDate.getYear() +1);
// Send the string representation back to the document
output.textContent = actualDate;
});Vous n'ajoutez pas, vous concaténez;
Vous devrez convertir la chaîne HTML en une date, puis utilisez Date code> méthodes pour le modifier. Voici un exemple:
console.log(year2+1);
var year2 = document.getElementById("year").innerHTML;
Il est si courant que les variables soient converties en chaînes en Javascript alors que vous ne vous attendez pas à ce qu'elles le soient. Chaque fois que vous soustrayez deux variables, Javascript est assez intelligent pour supposer que ce sont tous les deux des nombres. Lorsque vous ajoutez, cependant, Javascript ne sait pas s'il s'agit de nombres ou de chaînes (puisque l'opérateur + est utilisé pour les deux).
Vous pouvez toujours forcer une chaîne dans un nombre en faisant Number (year) + 1 ou en utilisant parseInt (year) + 1
Ou, en faisant + année .
Merci beaucoup. C'est bizarre que je n'ai pas besoin de le convertir quand je soustrais, mais content que ça marche :)
C'est parce que Javascript est un langage mal typé et qu'il détermine si une variable est une chaîne ou un nombre au moment de l'exécution. Lorsqu'il voit deux variables avec un + entre elles, il ne peut pas savoir avec certitude si elles doivent être des chaînes ou des nombres car les deux peuvent utiliser l'opérateur + . Cependant, lorsqu'il voit un - , il sait qu'ils doivent être forcés en nombres car seuls les nombres peuvent utiliser l'opérateur - .
var year2 = document.getElementById ("year"). innerHTML;renvoie une chaîne. Convertissez-le en entier.Copie possible de la fonction JavaScript pour ajouter X mois à une date a>