Простой вопрос по яваскрипт

CY4KA
На сайте с 25.08.2004
Offline
52
550

Есть вот такой вот код:

<script language="JavaScript"> 


i = 0;

function press(f) {
if(i == 0) f.but.value = "Approved"
if(i == 1) f.but.value = "Not Approved"
i++

}
</script>

При нажатии на кнопку он меняет на ней надпись, все хорошо, только делает он это 2 раза, т.е. нажимаешь 1й раз - кнопка становиться "Approved", нажимаешь 2й раз - "Not Approved", а вот при третьем нажатии уже ничего не происходит.

Собственно, вопрос: как заставить его при 3ем нажатии возвращаться к 1му значению и так по кругу, т.е. грубо говоря зациклить скрипт?

Я в яве ноль полный, так что не пинать =)

Заранее спасибо -)

nickspring
На сайте с 29.03.2006
Offline
228
#1

<script type="text/javascript"> 


i = false;

function press(f) {
if (!i) f.but.value = "Approved"; else f.but.value = "Not Approved";
i = !i;
}

</script>

ява и яваскрипт это разные вещи. Не путайте.

Eddie
На сайте с 12.07.2006
Offline
36
#2

Самый простой вариант, если ничего не менять, то приблизительно так:


<script language="JavaScript">
i = 0;
function press(f) {
if(i == 0) f.but.value = "Approved";
if(i == 1) f.but.value = "Not Approved";
i++;
if (i>1) i=0;
}
</script>
Блог веселого программиста (http://www.bloged.org)
CY4KA
На сайте с 25.08.2004
Offline
52
#3

nickspring, большое спасибо, работает =)

P.S.

Название поменял -)

П.С. 2

А я сильно обнаглею если ещё один вопрос задам? -)

Коля Дубр
На сайте с 02.03.2005
Offline
153
#4
CY4KA:
Название поменял -)

Черт, опередили, хотел проверить, как у меня эта кнопка работает =)

По сабжу посоветую не забывать о тернарном операторе - очень удобно, меньше вероятность сделать ошибку. Т.е. в коде Николая это будет выглядеть так:

f.but.value = (!i) ? "Approved" : "Not Approved";

Кстати, выносить "i" в глобальную область видимости - не есть гуд. Лучше кнопке забиндить свойство, и по нему проверять. Э... правда, не уверен, работает ли это в ИЕ, очень редко для него JS пишу... Вроде того:

f.but.value = (!f.but.approved) ? "Approved" : "Not Approved";

Вопрос, конечно, задавайте )

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
[Удален]
#5

<script language="JavaScript"> 


i = 0;

function press(f) {
if(i++ % 2) f.but.value = "Approved" else f.but.value = "Not Approved"

}
</script>
CY4KA
На сайте с 25.08.2004
Offline
52
#6

Есть вот такой вот скритп:

<script language="JavaScript">


function tableRuler() {

if (document.getElementById) {
tables = document.getElementsByTagName("table")

for (i=0;i<tables.length;i++) {

if (tables.className == "ruler") {

trs = tables.getElementsByTagName("tr")

for (j=0;j<trs.length;j++) {

if (trs[j].className != "header") {
trs[j].onmouseover = function() { this.className = "line"; return false }
trs[j].onmouseout = function() { this.className = ""; return false }
} } } } }
}

</script>

Он меняет цвет таблицы при onmouseover, а мне бы надо чтобы он менял цвет таблицы при значении вышеупомянутой кнопки на 1 (т.е. на Approved). Вот как бы привязать одно к другому?

Eddie
На сайте с 12.07.2006
Offline
36
#7

CY4KA, попробуйте так:


<script language="JavaScript">
i = 0;
function tableRuler() {
var old_i = i;
if (document.getElementById) {
tables = document.getElementsByTagName("table")
for (i=0;i<tables.length;i++) {
if (tables.className == "ruler") {
trs = tables.getElementsByTagName("tr")
for (j=0;j<trs.length;j++) {
if (trs[j].className != "header") {
if (old_i==0) trs[j].className = "line";
else trs[j].className = "";
}
}
}
}
}
i = old_i;
}

function press(f) {
if(i == 0)
{
f.but.value = "Approved";
i = 1;
}
else
{
f.but.value = "Not Approved";
i = 0;
}
tableRuler();
}

</script>
CY4KA
На сайте с 25.08.2004
Offline
52
#8

Eddie, я Ваш должник -))) Практически то, что надо (в одном месте только цифры местами поменял), сам я бы в жизни не сделал (не программист я) -))))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий