Как проверить знак умножения в JavaScript?

Я работаю над программой-калькулятором. Я хотел бы отобразить знак умножения в HTML, но также иметь возможность определять в JavaScript, был ли нажат знак умножения, чтобы он не добавлялся к отображению. Это относится и к другим символам. Я пробовал использовать значение UNICODE, но если вы нажмете (например):

1,

затем 2,

затем знак умножения,

на дисплее появляется знак умножения (чего я не хочу). Любые идеи?

const myDiv = document.querySelector('#display');
const myButtons = document.querySelectorAll('button');
myButtons.forEach((button) => {
    button.addEventListener('click', () => {
        if (button.textContent == 0x000D7) {
            // call on some operator function
        } else {
            myDiv.textContent += button.textContent;
        }
    });
});
<div id=display></div>
<button>1</button>
<button>2</button>
<button>&times;</button>



    

Вам нужно добавить селекторы к этим кнопкам и иметь несколько прослушивателей событий. Один прослушиватель событий, который нацелен на значения (1–9), а затем другие для операций. Классы могут нацеливаться на несколько элементов, идентификаторы могут нацеливаться на отдельные элементы.

Andrew Axton 07.01.2019 03:09

Использование button.textContent в слушателе создает циклическую ссылку, которая (когда-то давно) была серьезной проблемой. В любом случае он создает закрытие для каждой кнопки, в которой нет необходимости. Попробуйте заменить стрелочную функцию реальной функцией и используйте вместо нее это: function(e){ if (this.textContent == ...) ...}.

RobG 07.01.2019 03:10

вы можете создать объект действий: const ops = { '×': multiply, '÷': divide: '+': add, '-': subtract}, где каждое является обратным вызовом. При каждом нажатии клавиши делайте Object.keys(ops).includes(currentKey);

J-Cake 07.01.2019 03:11

@JacobSchneider Метод JS - это .includes, а не .contains

CertainPerformance 07.01.2019 03:12

@CertainPerformance Мне очень жаль, element.classList имеет функцию contains, и я всегда их путаю.

J-Cake 07.01.2019 03:14
Поведение ключевого слова "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) для оценки ваших знаний,...
0
5
556
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

0x000D7 преобразуется в номер, 215, который не является textContent кнопки ×. Скорее просто проверьте, является ли textContent ×:

const myDiv = document.querySelector('#display');
const myButtons = document.querySelectorAll('button');
myButtons.forEach((button) => {
    button.addEventListener('click', () => {
        if (button.textContent === '×') {
            // call on some operator function
            console.info('× clicked');
        } else {
            myDiv.textContent += button.textContent;
        }
    });
});
<div id=display></div>
<button>1</button>
<button>2</button>
<button>&times;</button>

В качестве альтернативы, если у вас есть лоты символьных кнопок, вы можете подумать о том, чтобы сделать обратное - проверьте, является ли textContent числом, и если это так, добавьте к myDivtextContent:

const myDiv = document.querySelector('#display');
const myButtons = document.querySelectorAll('button');
myButtons.forEach((button) => {
  button.addEventListener('click', () => {
    if (button.textContent.match(/^\d+$/)) {
      myDiv.textContent += button.textContent;
    } else {
      console.info('non-digit button clicked');
    }
  });
});
<div id=display></div>
<button>1</button>
<button>2</button>
<button>&times;</button>

Альтернативой добавлению множества отдельных слушателей с закрытием каждого из них было бы использование делегирования событий в контейнере button:

const myDiv = document.querySelector('#display');
document.querySelector('#buttons').addEventListener('click', ({ target }) => {
  if (!target.matches('button')) return;
  if (target.textContent.match(/^\d+$/)) {
    myDiv.textContent += target.textContent;
  } else {
    console.info('non-digit button clicked');
  }
});
<div id=display></div>
<div id = "buttons">
  <button>1</button>
  <button>2</button>
  <button>&times;</button>
</div>

Вы отвечаете на его вопрос, но не видите, что он пытается сделать, очевидно, что проверка времени - неправильный путь.

Andrew Axton 07.01.2019 03:10

В его коде написано // call on some operator function, но речь не идет о упомянутой функции, и не совсем понятно, откуда берутся два числа для умножения или где будет отображаться результат. Но он спрашивал не об этом, и, похоже, не имеет прямого отношения к проблеме, с которой он сталкивается.

CertainPerformance 07.01.2019 03:14

Скорее всего, список символов, которые нужно отображать или не отображать, должен быть в массиве или объекте, поскольку потребуется отображать десятичные точки и, возможно, другие нецифровые символы. Или, может быть, к содержащему элементу можно добавить класс для категоризации символов, чтобы они могли отображаться или нет в зависимости от контекста. Или… ;-)

RobG 07.01.2019 03:18

Как уже было предложено, добавление отдельных прослушивателей событий к разным типам кнопок является предпочтительным путем, однако, если это не помогает вашей лодке, сделайте следующее:

let input = "";
const callbacks = {
    '×': multiply,
    '÷': divide,
    '+': add, 
    '-': subtract
};

const btnHandler = function(e) {
    if (callbacks[this.value])
        callbacks[this.value]();
    else
        input += this.value;

    // do whatever else you need to do, like condition checking etc.
}

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