Теряю переменную при функции
Привет всем.
У меня по коду идете рейтинг по звездочкам и надо фиксировать несколько параметров,но при каждом вызове я теряю одну из переменных. Подскажите как не терять переменную в функции, вот мой код.
function textzaloba(tip,num) {
document.getElementById(tip+'1_zvezda').classList.remove("fa-star-o","fa-star");
document.getElementById(tip+'2_zvezda').classList.remove("fa-star-o","fa-star");
document.getElementById(tip+'3_zvezda').classList.remove("fa-star-o","fa-star");
document.getElementById(tip+'4_zvezda').classList.remove("fa-star-o","fa-star");
document.getElementById(tip+'5_zvezda').classList.remove("fa-star-o","fa-star");
if (num==1){
document.getElementById(tip+'1_zvezda').classList.add('fa-star');
document.getElementById(tip+'2_zvezda').classList.add("fa-star-o");
document.getElementById(tip+'3_zvezda').classList.add("fa-star-o");
document.getElementById(tip+'4_zvezda').classList.add("fa-star-o");
document.getElementById(tip+'5_zvezda').classList.add("fa-star-o");
}
if (num==2){
document.getElementById(tip+'1_zvezda').classList.add('fa-star');
document.getElementById(tip+'2_zvezda').classList.add("fa-star");
document.getElementById(tip+'3_zvezda').classList.add("fa-star-o");
document.getElementById(tip+'4_zvezda').classList.add("fa-star-o");
document.getElementById(tip+'5_zvezda').classList.add("fa-star-o");
}
if (num==3){
document.getElementById(tip+'1_zvezda').classList.add('fa-star');
document.getElementById(tip+'2_zvezda').classList.add("fa-star");
document.getElementById(tip+'3_zvezda').classList.add("fa-star");
document.getElementById(tip+'4_zvezda').classList.add("fa-star-o");
document.getElementById(tip+'5_zvezda').classList.add("fa-star-o");
}
if (num==4){
document.getElementById(tip+'1_zvezda').classList.add('fa-star');
document.getElementById(tip+'2_zvezda').classList.add("fa-star");
document.getElementById(tip+'3_zvezda').classList.add("fa-star");
document.getElementById(tip+'4_zvezda').classList.add("fa-star");
document.getElementById(tip+'5_zvezda').classList.add("fa-star-o");
}
if (num==5){
document.getElementById(tip+'1_zvezda').classList.add('fa-star');
document.getElementById(tip+'2_zvezda').classList.add("fa-star");
document.getElementById(tip+'3_zvezda').classList.add("fa-star");
document.getElementById(tip+'4_zvezda').classList.add("fa-star");
document.getElementById(tip+'5_zvezda').classList.add("fa-star");
}
if (tip=='servis' && num>0){var num_servis = num;}
if (tip=='kachestvo' && num>0){var num_kachestvo = num;}
alert(num_servis+' '+num_kachestvo);
}
<label>Оценить сервис:</label>
<div class="text-center">
<input id="servis1" name="servis" value="1" type="radio" />
<input id="servis2" name="servis" value="2" type="radio" />
<input id="servis3" name="servis" value="3" type="radio" />
<input id="servis4" name="servis" value="4" type="radio" />
<input id="servis5" name="servis" value="5" type="radio" />
<label onclick="textzaloba('servis','1')" for="servis1" class="btn btn-default"><i id="servis1_zvezda" class="fa fa-star-o text-yellow"></i></label>
<label onclick="textzaloba('servis','2')" for="servis2" class="btn btn-default"><i id="servis2_zvezda" class="fa fa-star-o text-yellow"></i></label>
<label onclick="textzaloba('servis','3')" for="servis3" class="btn btn-default"><i id="servis3_zvezda" class="fa fa-star-o text-yellow"></i></label>
<label onclick="textzaloba('servis','4')" for="servis4" class="btn btn-default"><i id="servis4_zvezda" class="fa fa-star-o text-yellow"></i></label>
<label onclick="textzaloba('servis','5')" for="servis5" class="btn btn-default"><i id="servis5_zvezda" class="fa fa-star-o text-yellow"></i></label>
</div>
<label>Оценить качество:</label>
<div class="text-center">
<input id="kachestvo1" name="kachestvo" value="1" type="radio" />
<input id="kachestvo2" name="kachestvo" value="2" type="radio" />
<input id="kachestvo3" name="kachestvo" value="3" type="radio" />
<input id="kachestvo4" name="kachestvo" value="4" type="radio" />
<input id="kachestvo5" name="kachestvo" value="5" type="radio" />
<label onclick="textzaloba('kachestvo','1')" for="kachestvo1" class="btn btn-default"><i id="kachestvo1_zvezda" class="fa fa-star-o text-yellow"></i></label>
<label onclick="textzaloba('kachestvo','2')" for="kachestvo2" class="btn btn-default"><i id="kachestvo2_zvezda" class="fa fa-star-o text-yellow"></i></label>
<label onclick="textzaloba('kachestvo','3')" for="kachestvo3" class="btn btn-default"><i id="kachestvo3_zvezda" class="fa fa-star-o text-yellow"></i></label>
<label onclick="textzaloba('kachestvo','4')" for="kachestvo4" class="btn btn-default"><i id="kachestvo4_zvezda" class="fa fa-star-o text-yellow"></i></label>
<label onclick="textzaloba('kachestvo','5')" for="kachestvo5" class="btn btn-default"><i id="kachestvo5_zvezda" class="fa fa-star-o text-yellow"></i></label>
</div>
|
Лучше подумайте как это использовать. Источник отсюда.
|
Это у меня уже есть и оно работает нормально без збоев.
Я же пишу мне надо переменные не терять. Есть конечно как вариант записывать их в HTML код а потом постоянно считывать отуда но я думаю это как то не по уму есть наверное более умные способы |
biryukovm,
var num_servis = num_kachestvo ="";
if (tip=='servis' && num>0){num_servis = num;}
if (tip=='kachestvo' && num>0){num_kachestvo = num;}
alert(num_servis+' '+num_kachestvo);
|
Цитата:
|
Цитата:
|
Цитата:
|
biryukovm,
лучше делегировать обработку, это сократит код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
@font-face {
font-family: 'FontAwesome';
src: url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.eot?v=4.7.0');
src: url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),
url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),
url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),
url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),
url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
.fa {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
input {
display: none;
}
.text-center {
direction: rtl;
text-align: left;
color: #D9A41D;
font-size: 22px;
cursor: pointer;
}
.text-center > label:before {
content: "\f006";
}
.text-center > .fa-star:before,
.text-center > label:hover:before,
.text-center > label:hover ~ label:before {
content: "\f005";
}
</style>
<script>
function setRate(e) {
var o = e.target || e.srcElement;
if(o.tagName=="INPUT") {
[].slice.call(o.parentNode.querySelectorAll('label')).reverse().forEach(function(e, i) {
if(o.value > i) e.classList.add('fa-star');
else e.classList.remove('fa-star');
})
}
}
</script>
</head>
<body>
<label>Оценить сервис:</label>
<div class="text-center" onclick="setRate(event)">
<input id="s1" name="service" value="1" type="radio" />
<input id="s2" name="service" value="2" type="radio" />
<input id="s3" name="service" value="3" type="radio" />
<input id="s4" name="service" value="4" type="radio" />
<input id="s5" name="service" value="5" type="radio" />
<label for="s5" class="fa btn btn-default"></label>
<label for="s4" class="fa btn btn-default"></label>
<label for="s3" class="fa btn btn-default"></label>
<label for="s2" class="fa btn btn-default"></label>
<label for="s1" class="fa btn btn-default"></label>
</div>
<label>Оценить качество:</label>
<div class="text-center" onclick="setRate(event)">
<input id="q1" name="quality" value="1" type="radio" />
<input id="q2" name="quality" value="2" type="radio" />
<input id="q3" name="quality" value="3" type="radio" />
<input id="q4" name="quality" value="4" type="radio" />
<input id="q5" name="quality" value="5" type="radio" />
<label for="q5" class="fa btn btn-default"></label>
<label for="q4" class="fa btn btn-default"></label>
<label for="q3" class="fa btn btn-default"></label>
<label for="q2" class="fa btn btn-default"></label>
<label for="q1" class="fa btn btn-default"></label>
</div>
</body>
</html>
|
Неужеди никто подсказать не может ?
|
Цитата:
|
Цитата:
|
Конечно
|
Видимо меня не правильно поняли, стили на звездочках сохраняются как и параметр radio checked
У меня это все работает, но мне нужно знать следующее если он укажить хоть один из рейтинга ниже 3 звезд то должен появиться <textarea></textarea> и туда описать причину недовольства. А у меня проблема такая что рейтинг работает а вот отпределить все парарметры где рейтинг ниже 3х не могу, Можно конечно считывать и так $("input:radio[name=option]:checked").val() но оно работает только после нескольких нажатий А мне нужно знать значение всех рейтингов которые будут и потом определять есть ли в одном их них меньше 3 |
Если оценка (оценки) есть условие обязательное и их элементы управления, это только часть некой формы со множеством других полей, значит лучше этим оценкам определить значения по умолчанию, чем мурыжить форму различными проверками.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
@font-face {
font-family: 'FontAwesome';
src: url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.eot?v=4.7.0');
src: url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),
url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),
url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),
url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),
url('http://fontawesome.io/assets/font-awesome/fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
.fa {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
input, #cause {
display: none;
}
.text-center {
direction: rtl;
text-align: left;
color: #D9A41D;
font-size: 22px;
cursor: pointer;
}
.text-center > label:before {
content: "\f006";
}
.text-center > .fa-star:before,
.text-center > label:hover:before,
.text-center > label:hover ~ label:before {
content: "\f005";
}
</style>
<script>
function setRate(e) {
var a = e.target || e.srcElement, b = document.querySelector('#cause'), c = b.querySelector('textarea');
if(a.tagName=="INPUT") {
[].slice.call(a.parentNode.querySelectorAll('label')).reverse().forEach(function(e, i) {
a.value > i ? e.classList.add('fa-star') : e.classList.remove('fa-star');
});
if(a.value < 3 || document.querySelector('input:not([name='+a.name+']):checked').value < 3) {
b.style.display = 'block';
c.name = b.id;
c.required = true;
} else {
b.style.display = 'none';
c.name = '';
c.required = false;
}
}
}
</script>
</head>
<form autocomplete="off">
<body>
<label>Оценить сервис:</label>
<div class="text-center" onclick="setRate(event)">
<input id="s1" name="service" value="1" type="radio" />
<input id="s2" name="service" value="2" type="radio" />
<input id="s3" name="service" value="3" type="radio" checked="" />
<input id="s4" name="service" value="4" type="radio" />
<input id="s5" name="service" value="5" type="radio" />
<label for="s5" class="fa btn btn-default"></label>
<label for="s4" class="fa btn btn-default"></label>
<label for="s3" class="fa fa-star btn btn-default"></label>
<label for="s2" class="fa fa-star btn btn-default"></label>
<label for="s1" class="fa fa-star btn btn-default"></label>
</div>
<label>Оценить качество:</label>
<div class="text-center" onclick="setRate(event)">
<input id="q1" name="quality" value="1" type="radio" />
<input id="q2" name="quality" value="2" type="radio" />
<input id="q3" name="quality" value="3" type="radio" checked="" />
<input id="q4" name="quality" value="4" type="radio" />
<input id="q5" name="quality" value="5" type="radio" />
<label for="q5" class="fa btn btn-default"></label>
<label for="q4" class="fa btn btn-default"></label>
<label for="q3" class="fa fa-star btn btn-default"></label>
<label for="q2" class="fa fa-star btn btn-default"></label>
<label for="q1" class="fa fa-star btn btn-default"></label>
</div>
<div id="cause">
<label>Причина:</label><br />
<textarea></textarea>
</div>
</form>
</body>
</html>
|
| Часовой пояс GMT +3, время: 01:47. |