AddEventListener не работает? Он должен что-то делать с onclick

У меня есть форма, в которой после нажатия на переключатель я хочу, чтобы появилась пара текстовых полей.

Это не работает. Ничего не появляется, консоль ничего не говорит. Убедившись, что файл существует и правильно вызван, я проверил другие JS в том же html-документе, и он действительно работает, поэтому я думаю, что что-то не так с тем, как я вызываю эту функцию.

Это мой html-код:

          <label class = "col-md-3">
            <input class = "form-check-input" type = "radio" name = "pagoMedioUtilizado" id = "tarjeta" value = "tarjeta" addEventListener = "return avisoPago.tipoPago();">
            Tarjeta Crédito
          </label>

      <div class = "form-group sr-only" id = "bloqueOperacion">
        <label class = "control-label">Código de la Operación</label>
          <input type = "text" name = "pagoCodigo" class = "form-control" id = "ticket" placeholder = "Ingrese el número de Operación que está al pie del ticket">
      </div>

А вот код JS:

var avisoPago = {
    //obtenemos el valor de email con this.email()
    fecha: function () {    return $('#fecha').val();   },  
    monto: function () {    return $('#monto').val();   },  
    cuentaOrigen: function () { return $('#cuentaOrigen').val();    },  
    sucursal: function () { return $('#sucursal').val();    },  
    ticket: function () {   return $('#ticket').val();  },  

    tipoPago: function() {
        if (document.getElementById('deposito').checked) {
            console.info('se depositó');
            $('#bloqueSucursal').removeClass('sr-only');
            $('#bloqueOperacion').removeClass('sr-only');
            $('#bloqueCuenta').addClass('sr-only');
        }else if (document.getElementById('transferencia').checked) {
            console.info('se transfirió');
            $('#bloqueCuenta').removeClass('sr-only');
            $('#bloqueSucursal').addClass('sr-only');
            $('#bloqueOperacion').addClass('sr-only');
        }else if (document.getElementById('tarjeta').checked) {
            console.info('se pagó con tarjeta');
            $('#bloqueCuenta').addClass('sr-only');
            $('#bloqueSucursal').addClass('sr-only');
            $('#bloqueOperacion').removeClass('sr-only');
        }else if (document.getElementById('efectivo').checked) {
            console.info('se pagó en efectivo');
            $('#bloqueCuenta').addClass('sr-only');
            $('#bloqueSucursal').addClass('sr-only');
            $('#bloqueOperacion').addClass('sr-only');
        }   
    },

Итак, как вы можете видеть, если я щелкну радио с идентификатором tarjeta, содержимое bloqueOperacion должно изменить классы. Sr-only - это класс, который скрывает содержимое, поэтому скрытый материал должен появиться после удаления класса.

Что я делаю неправильно? Спасибо!

Почему вы используете return? Функция ничего не возвращает.

Barmar 12.04.2018 23:17

удалите addEventListener из html и добавьте это в js document.getElementById("tarjeta").addEventListener("click", function(){ avisoPago.tipoPago() });

Muhammad Usman 12.04.2018 23:20
Поведение ключевого слова "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
2
87
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

addEventListener - неправильное имя атрибута. Замени его на onClick

Вы перепутали ненавязчивую функцию js с атрибутом HTML.

Обновлено: то, что вы хотите, это

onClick = "avisoPago.tipoPago()"

Он использовал onClick, и это не сработало, поэтому я изменил его на addEventListener

Rosamunda 12.04.2018 23:16

@Rosamunda addEventListener - это функция, которую вы вызываете из Javascript, а не атрибут.

Barmar 12.04.2018 23:18
Ответ принят как подходящий

addEventListener - это не атрибут, это функция, которую вы вызываете из JS.

Но поскольку вы используете jQuery, вы можете использовать его более короткий метод:

$(document).ready(function() {
    $("#tarjeta").click(avisoPago.tipoPago);
});

Вздох, да. Не могу предположить, что читатель знает эти очевидные вещи.

Barmar 12.04.2018 23:24

Я только начинаю с JS Спасибо! Задача решена! :)

Rosamunda 12.04.2018 23:28

Я не уверен во всем остальном, но, заменив addEventListener на onclick, удалив return из onclick, изменив .getElementById tipoPago на tarjeta, правильную цель, и добавив } в конец предоставленного вами объекта js, консоль журнал работает правильно.

 var avisoPago = {
    //obtenemos el valor de email con this.email()
    fecha: function () {    return $('#fecha').val();   },  
    monto: function () {    return $('#monto').val();   },  
    cuentaOrigen: function () { return $('#cuentaOrigen').val();    },  
    sucursal: function () { return $('#sucursal').val();    },  
    ticket: function () {   return $('#ticket').val();  },  

    tipoPago: function() {
        if (document.getElementById('tarjeta').checked) {
            console.info('se depositó');
            $('#bloqueSucursal').removeClass('sr-only');
            $('#bloqueOperacion').removeClass('sr-only');
            $('#bloqueCuenta').addClass('sr-only');
        }else if (document.getElementById('transferencia').checked) {
            console.info('se transfirió');
            $('#bloqueCuenta').removeClass('sr-only');
            $('#bloqueSucursal').addClass('sr-only');
            $('#bloqueOperacion').addClass('sr-only');
        }else if (document.getElementById('tarjeta').checked) {
            console.info('se pagó con tarjeta');
            $('#bloqueCuenta').addClass('sr-only');
            $('#bloqueSucursal').addClass('sr-only');
            $('#bloqueOperacion').removeClass('sr-only');
        }else if (document.getElementById('efectivo').checked) {
            console.info('se pagó en efectivo');
            $('#bloqueCuenta').addClass('sr-only');
            $('#bloqueSucursal').addClass('sr-only');
            $('#bloqueOperacion').addClass('sr-only');
        }   
    },
    }
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label class = "col-md-3">
            <input class = "form-check-input" type = "radio" name = "pagoMedioUtilizado" id = "tarjeta" value = "tarjeta" onclick = "avisoPago.tipoPago();">
            Tarjeta Crédito
          </label>

      <div class = "form-group sr-only" id = "bloqueOperacion">
        <label class = "control-label">Código de la Operación</label>
          <input type = "text" name = "pagoCodigo" class = "form-control" id = "ticket" placeholder = "Ingrese el número de Operación que está al pie del ticket">
      </div>

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