Вернуть обратное значение при вводе с помощью javascript

У меня есть кнопка-переключатель по умолчанию value = "1" = on offer. Теперь, с моим jQuery, я могу изменить это значение на 0 по запросу. Но после этого, если я хочу изменить его обратно на значение 1, оно заблокировано. с value = "0". Как я могу сделать, чтобы это вернулось к моему значению по умолчанию?

function change() {
  var elem = document.getElementById("home-header_on_offer");
  if (elem.value == "1") 
    elem.value = "0";
  else if (elem.value = "0") 
    elem.value = "1";
}
<label class = "label" style = "right: -20px;position: relative">On offer</label>
<label class = "switchCr">
  <input onclick = "change()" type = "checkbox" name = "custom7" value = "1" id = "home-header_on_offer"
checked = "checked">
  <span class = "sliderCr round select" id = "my-career-search-header" style = "border-radius: 0px;top: -52px;width: 255px;height: 33px;border-width: 1px;border-color:  #bbb;position: relative;box-shadow: none;"onclick = "myFunction2()"></span>
</label>
else if (elem.value = "0") всегда будет правдой. Вам нужно использовать == или === для проверки равенства, а не =. Также обратите внимание, что изменение значения элемента управления во время выполнения — плохая идея. Весь смысл флажка в том, что он отправляет значение, когда он отмечен, иначе он не отправляет никакого значения. Поэтому вам просто нужно, чтобы ваша логика на стороне сервера работала с отправленным значением или нулевым значением.
Rory McCrossan 18.07.2019 12:21

спасибо за ваш ответ :) === сработало для меня :)

Andrei Nagy 18.07.2019 12:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
92
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

У вас тип в вашем else состоянии. Также, если вы хотите сравнить с 0 или «0», лучше используйте строгое сравнение ===:

  if (elem.value === "1") {
    elem.value = "0";
   } else if (elem.value === "0") {
    elem.value = "1";
   }
Ответ принят как подходящий

В вашей части else if это будет == вместо =.

  • == для сравнения две стороны
  • === для плаща со строгим типом
  • = для присвоения.

function change()  {
    var elem = document.getElementById("home-header_on_offer");
    if (elem.value == '1') elem.value = '0';
    else if (elem.value == '0') elem.value = '1';

    console.info(elem.value)
}
<label class = "label">On offer</label>
<label class = "switchCr ">
    <input onclick = "change()" type = "checkbox" name = "custom7" value = "1" id = "home-header_on_offer" checked = "checked">
    <span class = "sliderCr round select" id = "my-career-search-header"></span>
</label>

Это просто:

function change() {
  var elem = document.getElementById("home-header_on_offer");
  if (elem.value == "1") {
    elem.value = "0";
    alert(elem.value);
  } else {
    elem.value = "1";
    alert(elem.value);
  } 
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label class = "label" style = "right: -20px;position: relative">On offer</label>
<label class = "switchCr">
<br>
  <input onclick = "change()" type = "checkbox" name = "custom7" value = "1" id = "home-header_on_offer"
checked = "checked">
  <span class = "sliderCr round select" id = "my-career-search-header" style = "border-radius: 0px;top: -52px;width: 255px;height: 33px;border-width: 1px;border-color:  #bbb;position: relative;box-shadow: none;"onclick = "myFunction2()"></span>
</label>

Проблема в том, что = вместо == (= против ===)

Решения Альтернативный для переключения

function change() {
  var elem = document.getElementById("home-header_on_offer");
  elem.value = 1 - elem.value;
  console.info(elem.value)
}
<label class = "label" style = "">On offer</label>
<input onclick = "change()" type = "checkbox" name = "custom7" value = "1" id = "home-header_on_offer" checked = "checked">

ИЛИ Использование свойства checked с unary plus

function change() {
  var elem = document.getElementById("home-header_on_offer")
  console.info(+elem.checked)
}
<label class = "label" style = "">On offer</label>
<input onclick = "change()" type = "checkbox" name = "custom7" value = "1" id = "home-header_on_offer" checked = "checked">

Другие вопросы по теме