#javascript #jquery
#javascript #jquery
Вопрос:
У меня это работало, и где-то по ходу я что-то напутал. С тех пор я внес несколько изменений, пытаясь устранить проблему, и теперь я просто застрял. На данный момент у меня есть это:
var calBtn = $('#calButton').attr('value');
function disappearingTable() {
if (calBtn = 'Turn Calendar Off')
{
$('.calendarLayer').toggle();
$('#calButton').attr('value', 'Turn Calendar On');
}
else if (calBtn = 'Turn Calendar On')
{
$('.calendarLayer').toggle();
$('#calButton').attr('value', 'Turn Calendar Off');
}
}
Это в тегах скрипта в заголовке. Тогда в теле у меня есть это.
<form id="calendarForm" action="javascript:void(0);">
<input type="submit" id="calButton" value="Turn Calendar Off" onclick="disappearingTable()" />
</form>
Я не могу понять это ни за что на свете. Даже когда я пробовал обычный Javascript, я все еще получаю undefined. Кто-нибудь помогает? Спасибо!
Ответ №1:
=
это оператор присваивания, который вы должны использовать ===
или ==
для равенства:
if (calBtn == 'Turn Calendar Off')
{
$('.calendarLayer').toggle();
$('#calButton').attr('value', 'Turn Calendar On');
}
else if (calBtn == 'Turn Calendar On')
{
$('.calendarLayer').toggle();
$('#calButton').attr('value', 'Turn Calendar Off');
}
Комментарии:
1. Спасибо за совет, но он все еще не работает. Если я переключусь на ==, вообще ничего не произойдет. При = переключатель срабатывает повторно, и текст меняется на «Включить календарь», но никогда не меняется после первого нажатия. Забавы ради я добавил document.write(calBtn); именно так я пришел к выводу, что у меня проблема с attr (не определена).
2. Вы должны использовать,
===
пока не будете знать на 100%, что==
делает.3. Будет сделано. На самом деле я просмотрел и изменил все == на === и != на !== ранее, когда запускал свой код через валидатор. Именно тогда мне и удалось испортить свою функцию. Затем, пытаясь выяснить, что произошло, я изменил все это обратно и сумел еще больше испортить равенство в функции. Спасибо
Ответ №2:
Во-первых, как сказано в no.good.at.coding =
, является оператором присваивания и неверен, даже если он работает. ==
или ===
используется для проверки равенства
Кроме этого, если я ничего не упускаю, значение переменной calBtn
устанавливается только один раз вне функции. Всякий раз, когда вызывается функция для получения другого значения calBtn
, его необходимо изменять в функции или извлекать из элемента dom при каждом вызове функции .
попробуйте это..
function disappearingTable() {
var calBtn = $('#calButton').attr('value');
if (calBtn ==='Turn Calendar Off')
{
$('.calendarLayer').toggle();
$('#calButton').attr('value', 'Turn Calendar On');
}
else if (calBtn === 'Turn Calendar On')
{
$('.calendarLayer').toggle();
$('#calButton').attr('value', 'Turn Calendar Off');
}
}
Комментарии:
1. Вам следует обновить свой ответ правильными операторами равенства.
2. facepalm Я переместил переменную внутрь, и теперь она работает. Я не понимаю, как мне удалось переместить его за пределы функции. Однако, когда это было там, я не думал, что это неправильно. Я все еще действительно новичок в Javascript и jQuery. Спасибо за помощь.
Ответ №3:
В дополнение к проверкам равенства, которые все еще необходимо изменить, я думаю, у вас проблема, связанная с подразумеваемыми глобальными значениями, потому что ваша переменная calButton находится вне вашей функции.
Что, если вы переработали свой код следующим образом:
$('#calButton').click(function(e) {
var element = $(this);
var value = element.val();
var layer = $('.calendarLayer');
if (value === 'Turn Calendar Off') {
layer.toggle();
element.attr('value', 'Turn Calendar On');
} else if (value === 'Turn Calendar On') {
layer.toggle();
element.attr('value', 'Turn Calendar Off');
}
});
<form id="calendarForm">
<input type="submit" id="calButton" value="Turn Calendar Off" />
</form>
Комментарии:
1. Это действительно была проблема. Я также исправил проверку на равенство. Спасибо