Использование функции обратного вызова вместо onchange

У меня есть форма с некоторыми базовыми изменениями, внесенными jQuery, все работает нормально... В настоящее время мне приходится использовать onchange = "state()" для вызова скрипта.

Я действительно новичок в Javascript и JQuery, и мне было интересно, действительно ли это лучшее решение, я думал об использовании функции обратного вызова, вероятно, с использованием on(), но не могу заставить это работать, это лучшее решение и как бы я добиться функции обратного вызова (даже если это не лучшее решение, поскольку мне просто интересно)

Спасибо

let cWebsite = ["Communicate a message", "Build trust in our brand", "Sell our product", "Get our content online", "Realign our brand", "Engage a new audience"];
let iWebsite = ["make our site more discoverable", "increase engagement", "make it more user friendly", "improve accessiblity", "add more sections", "rebuild the whole thing!"];
let cSeo = ["build on my seo", "make my website faster", "make my website more usable"];
let iSeo = ["improve seo", "reporting my seo", "engage an audience", "All seo services", "compliment other touchpoints"];
let cGraphics = ["Create more graphics", "improve a specific section", "target a new audience", "make it more noticable", "make it stand out"];
let iGraphics = ["test a graphic", "solve a business problem", "track stuff!", "engage an audience", "promote our brand"];

let prices = {
    cWebsite: ["Please Select", "5k - 10k", "10k - 20k", "20k - 30k", "10k - 40k", "60k - 80k", "80k - 100k", "100K+"],
    iWebsite: ["Please Select", "5k - 10k", "10k - 20k", "20k - 30k", "10k - 40k", "60k - 80k", "80k - 100k", "100K+"],
    cSeo: ["Please Select", "£300/mo", "£550/mo", "£1100/mo"],
    iSeo: ["Please Select", "£300/mo", "£550/mo", "£1100/mo"],
    cGraphics: ["Please Select", "£100 - £300", "£300 - £600", "£900 - £1k", "1k - 5k", "5k - 15k", "15k+"],
    iGraphics: ["Please Select", "£100 - £300", "£300 - £600", "£900 - £1k", "1k - 5k", "5k - 15k", "15k+"]
    };

function state() {
    let sta = document.getElementById("state");
    let ser = document.getElementById("service");
    let site = document.getElementById("lives");
    let state = sta.options[sta.selectedIndex].value;
    let service = ser.options[ser.selectedIndex].value;

    if (state === "create") {
        if (service === "website") {
            doJoin(cWebsite);
            priceList(prices.cWebsite);
            site.style.display = "none";
        } else if (service === "seo") {
            doJoin(cSeo);
            priceList(prices.cSeo);
            site.style.display = "block";
        } else if (service === "graphics") {
            doJoin(cGraphics);
            priceList(prices.cGraphics);
            site.style.display = "none";
        }
    } else if (state === "improve") {
        if (service === "website") {
            doJoin(iWebsite);
            priceList(prices.iWebsite);
            site.style.display = "block";
        } else if (service === "seo") {
            doJoin(iSeo);
            priceList(prices.iSeo);
            site.style.display = "block";
        } else if (service === "graphics") {
            doJoin(iGraphics);
            priceList(prices.iGraphics);
            site.style.display = "none";
        }
    }
}



function doJoin(x) {
 $("#choices").empty();
    x.forEach(function (list) {
    let checkbox = "<input type='checkbox'><label>"+list+"</label><br>"
    $("#choices").append($(checkbox));
    });
}


function priceList(x) {
 $("#pricelist").empty();
    x.forEach(function (list) {
    let option = "<option>"+list+"</option>"
    $("#pricelist").append($(option));
    });
      }

Я не могу рекомендовать Вяз или Реагировать достаточно высоко. Потратьте один день на изучение нового способа осмысления проблемы. В конце концов, вы можете не выбрать Elm или React для своего проекта, но у вас всегда будут уроки, на которых можно учиться и расти.

Mulan 04.02.2019 18:18

Вопрос в том, следует ли использовать глобальные атрибуты обработчика событий в HTML или .addEventListener()?

guest271314 04.02.2019 18:19

оба действительно....

saltedm8 04.02.2019 18:21

@saltedm8 См. Когда использование атрибутов глобального обработчика событий в html стало «расцениваться как плохая практика»?. По-разному. Какая вторая часть вопроса? Обратите внимание, что нет необходимости переносить строки HTML в вызов jQuery() в $("#choices").append($(checkbox)) или $("#pricelist").append($(option)).

guest271314 04.02.2019 18:23

Я не вижу, где вы используете on в этом коде. Включите весь соответствующий код в минимальный воспроизводимый пример в самом вопросе. Для этого вы можете использовать Фрагменты стека.

Heretic Monkey 04.02.2019 18:24

Я не использую on() в этом коде, вопрос заключался в том, могу ли я как-то его использовать, например, вот так $('state').on('change', function() // state() // }) - или, но это не работает

saltedm8 04.02.2019 18:28
Поведение ключевого слова "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
6
629
1

Ответы 1

   $( "#foo" ).on( "click", function() {
  console.info( 22 );
});  
 <div id = "foo">asas</div>

подробнее см. здесь: http://api.jquery.com/on/

Я знаю, как это используется, просто кажется, что это не работает применительно к моему коду, в этом цель вопроса, но спасибо за ответ.

saltedm8 04.02.2019 20:39

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