Измените результат переменной на основе нажатия кнопки, чтобы соответствовать другой кнопке

#javascript #variables #button

#javascript #переменные #кнопка

Вопрос:

У меня есть кнопка с идентификатором, который устанавливает глобальную переменную, подобную этой:

 <div class="mybuttons"    
<button id="mapOne" data-toggle="modal" data-target="#map-1-scene-1">Scene</button>
<button class="no-click-span" id="mapOneCurrent" data-toggle="modal" data-target="#map-1-scene-1"><i class="fas fa-charging-station fa2x"></i> Current</button>
</div>
  

Затем в JS:

 var mapNumber;

const mybuttons = document.querySelectorAll('.mybuttons button');
mybuttons.forEach(mybutton => {
  mybutton.addEventListener('click', processClick);
});

function processClick() {
  window.mapNumber = this.id; // the id of the clicked button
} 
  

Вторая кнопка в div с идентификатором #mapOneCurrent просто повторно открывает модальный режим без обновления данных.

Я хотел бы, чтобы при нажатии второй кнопки (например, #mapOneCurrent) переменная mapNumber просто оставалась как mapOne (без слова «Current» в конце).). Таким образом, это было бы почти так, как если бы была нажата другая кнопка.

Возможно ли это сделать в сценарии такого типа?

Комментарии:

1. Если вы уже получаете идентификатор нажатой кнопки, можете ли вы просто проверить, какой идентификатор перед установкой mapNumber переменной?

Ответ №1:

Это должно делать то, что вы хотите:

 var mapNumber;

const mybuttons = [...document.querySelectorAll('.mybuttons button')];
mybuttons.forEach(mybutton=>{
  mybutton.addEventListener('click',function() {
    window.mapNumber = this.id.replace("Current",""); // the id of the clicked button
    console.log(mapNumber);
  });
})  
 <div class="mybuttons">   
<button id="mapOne" data-toggle="modal" data-target="#map-1-scene-1">Scene</button>
<button class="no-click-span" id="mapOneCurrent" data-toggle="modal" data-target="#map-1-scene-1"><i class="fas fa-charging-station fa2x"></i>Current</button>
</div>  

Однако вы могли бы упростить это, используя «делегированное прослушивание событий» для:

 var mapNumber;

document.querySelector('.mybuttons').addEventListener('click',function(ev){
  if (ev.target.tagName==="BUTTON") {  
    window.mapNumber = ev.target.id.replace("Current","");
    console.log(mapNumber);
  }
})
   
 <div class="mybuttons">   
<button id="mapOne" data-toggle="modal" data-target="#map-1-scene-1">Scene</button>
<button class="no-click-span" id="mapOneCurrent" data-toggle="modal" data-target="#map-1-scene-1"><i class="fas fa-charging-station fa2x"></i>Current</button>
</div>  

В этом фрагменте событие прослушивает click s в контейнере-оболочке .mybuttobs , но запускает действия только в том случае, если был нажат inside BUTTON .

Комментарии:

1. Спасибо. Это действительно было так же просто, как добавить this.id.replace(«Current»,»»); это в код! Удивительно!