javascript动态选择/单击事件

时间:2020-07-13 19:59:01

标签: javascript html

您好,我的点击事件有问题 我有两个选择的第一个选择更改第二个的选项 而且一切正常,这消除了我的onclick的麻烦,单击一个选项应该会更改类的innerhtml和data.value:

selected-faturamento

我正在打电话给我的活动:

  ftoptionsList.forEach((o) => {
    o.addEventListener("click", () => {
      let input = o.querySelector("input").id;
      selectedFaturamento.innerHTML = o.querySelector("label").innerHTML;
      selectedFaturamento.setAttribute("data-value", input);
      faturamentoContainer.classList.remove("active");
    });
  });

能够更改我的data.value和我的innerhtml,但是由于某种原因,每次单击选项时,我的事件都不会被调用,

faturamentoOptions()

const data = [
  {
    id: 1,
    name: "SIMPLES NACIONAL – MEI",
    funcionarioIncrease: 49.99,
    maxFuncionario: 1,
    socioIncrease: 0,
    maxSocio: 5,
    FATURAMENTO: [
      {
        id: 1,
        name: "ATÉ 30.000,00",
        value: 49.99,
      },
      {
        id: 2,
        name: "De 30.001,00 a 50.000,00 ",
        value: 99.99,
      },
    ],
  },
  {
    id: 2,
    name: "SIMPLES NACIONAL – SERVIÇOS",
    funcionarioIncrease: 25,
    maxFuncionario: 3,
    socioIncrease: 25,
    maxSocio: 5,
    FATURAMENTO: [
      {
        id: 1,
        name: "ATÉ 50.000,00",
        value: 149.99,
      },
      {
        id: 2,
        name: "De 40.001,00 a 50.000,00 ",
        value: 199.99,
      },
    ],
  },
];

function createInput(id) {
  let inputRadio = document.createElement("input");

  if (id) {
    inputRadio.id = id;
    inputRadio.name = "category";
    inputRadio.type = "radio";
    inputRadio.value = id;
    inputRadio.classList.add("radio");
    return inputRadio;
  }
  return null;
}

function createFaturamento() {
  let container = document.querySelector(".faturamento-container");
  let selectedFaturamento = document.querySelector("div#selected-faturamento");

  data.forEach((value) => {
    if (value.id == 1) {
      value.FATURAMENTO.forEach((faturamento) => {
        let optionDiv = document.createElement("div");
        optionDiv.id = "ft";
        optionDiv.classList.add("optionft");
        container.append(optionDiv);
        let input = createInput(faturamento.id);
        if (!input) {
          return null;
        }
        optionDiv.append(input);
        let label = document.createElement("label");
        label.htmlFor = value.id;
        label.innerHTML = faturamento.name;
        optionDiv.append(label);
        if (faturamento.id == 1) {
          selectedFaturamento.innerHTML = faturamento.name;
          selectedFaturamento.setAttribute("data-value", faturamento.id);
        }
      });
    }
  });
}

function faturamentoOptions() {
  document.querySelectorAll("div#ft").forEach((item) => {
    item.remove();
  });
  let container = document.querySelector(".faturamento-container");
  let mode = document.querySelector(".selected").getAttribute("data-value");
  let selectedFaturamento = document.querySelector("div#selected-faturamento");
  data.forEach((value) => {
    if (value.id == mode) {
      value.FATURAMENTO.forEach((faturamento) => {
        let optionDiv = document.createElement("div");
        optionDiv.id = "ft";
        optionDiv.classList.add("optionft");
        container.append(optionDiv);
        let input = createInput(faturamento.id);
        if (!input) {
          return null;
        }
        optionDiv.append(input);
        let label = document.createElement("label");
        label.htmlFor = value.id;
        label.innerHTML = faturamento.name;
        optionDiv.append(label);
        if (faturamento.id == 1) {
          selectedFaturamento.innerHTML = faturamento.name;
          selectedFaturamento.setAttribute("data-value", faturamento.id);
        }
      });
    }
  });
}

function createModeOptions() {
  let container = document.querySelector(".options-container");
  let selectedMode = document.querySelector("div#serviceMode");
  data.forEach((value) => {
    let optionDiv = document.createElement("div");
    optionDiv.id = "serviceOption";
    optionDiv.classList.add("option");
    container.append(optionDiv);
    let input = createInput(value.id);
    if (!input) {
      return null;
    }
    optionDiv.append(input);
    var label = document.createElement("label");
    label.htmlFor = value.id;
    label.innerHTML = value.name;
    optionDiv.append(label);
    if (value.id == 1) {
      selectedMode.innerHTML = value.name;
      selectedMode.setAttribute("data-value", value.id);
    }
  });
}

function initalize() {
  //variables
  let selectedMode = document.querySelector("div#serviceMode");
  let optionsContainer = document.querySelector(".options-container");
  let optionsList = document.querySelectorAll("div#serviceOption");
  let selectedFaturamento = document.querySelector("div#selected-faturamento");
  let faturamentoContainer = document.querySelector(".faturamento-container");
  let ftoptionsList = document.querySelectorAll("div#ft");

  //events
  selectedMode.addEventListener("click", () => {
    faturamentoContainer.classList.remove("active");
    optionsContainer.classList.toggle("active");
  });

  selectedFaturamento.addEventListener("click", () => {
    faturamentoContainer.classList.toggle("active");
  });

  optionsList.forEach((o) => {
    o.addEventListener("click", () => {
      let input = o.querySelector("input").id;
      selectedMode.innerHTML = o.querySelector("label").innerHTML;
      selectedMode.setAttribute("data-value", input);
      optionsContainer.classList.remove("active");
      faturamentoOptions();
    });
  });

  ftoptionsList.forEach((o) => {
    o.addEventListener("click", () => {
      let input = o.querySelector("input").id;
      selectedFaturamento.innerHTML = o.querySelector("label").innerHTML;
      selectedFaturamento.setAttribute("data-value", input);
      faturamentoContainer.classList.remove("active");
    });
  });
  //call functions
}
createModeOptions();
createFaturamento();
initalize();
.option {
  border-radius: 8px;
}
.select-box {
  display: flex;
  width: 100%;
  max-height: 50px;
  flex-direction: column;
  position: relative;
}

.select-box .options-container {
  padding: 0;
  background: #fff;
  color: #000;
  max-height: 0;
  width: 100%;
  opacity: 0;
  transition: all 0.4s;
  border: 1px solid #dadada;
  border-radius: 8px;
  position: absolute;
  overflow: hidden;
  order: 1;
  top: 120%;
}
.select-box .options-container::after {
  position: absolute;
  display: block;
  content: "";
  bottom: 100%;
  right: 25px;
  width: 7px;
  height: 7px;
  margin-bottom: -3px;
  border-top: 1px solid #dadada;
  border-left: 1px solid #dadada;
  background: #fff;
  transform: rotate(45deg);
  transition: all 0.4s ease-in-out;
}
.selected {
  width: 100%;
  font-size: 1rem;
  outline: none;
  border: 1px solid #ffb24f;
  border-radius: 5px;
  padding: 1rem 0.7rem;
  font-family: "Poppins";
  background: #00416a;
  color: #ffb24f;
  transition: 0.1s ease-out;
  position: relative;
  order: 0;
}
.selected::before {
  background: none;
  border: 1px solid #ffb24f;
  content: "";
  display: block;
  position: absolute;
  top: 2px;
  left: 2px;
  right: 2px;
  bottom: 2px;
  pointer-events: none;
}
.selected::after {
  position: absolute;
  display: block;
  content: "";
  width: 10px;
  height: 10px;
  top: 50%;
  right: 25px;
  border-bottom: 1px solid #dadada;
  border-right: 1px solid #dadada;
  transform: rotate(45deg) translateY(-50%);
  transition: all 0.4s ease-in-out;
  transform-origin: 50% 0;
  transition: all 0.4s;
}

.select-box .options-container.active {
  max-height: 240px;
  opacity: 1;
  padding: 10px 0;
  overflow: visible;
  z-index: 999;
}

.select-box .options-container.active + .selected::after {
  margin-top: 3px;
  transform: rotate(-135deg) translateY(-50%);
}

.select-box .options-container::-webkit-scrollbar {
  width: 8px;
  background: #fff;
  border-radius: 0 8px 8px 0;
}

.select-box .options-container::-webkit-scrollbar-thumb {
  background: #dadada;
  border-radius: 0 8px 8px 0;
}

.select-box .option,
.selected {
  padding: 12px 24px;
  cursor: pointer;
}

.select-box label {
  cursor: pointer;
  font-family: "Poppins";
  color: orange;
}

.select-box label:hover {
  color: orange;
}
.select-box .option .radio {
  display: none;
}
.select-box .optionft .radio {
  display: none;
}
.optionft {
  padding: 12px 24px;
  cursor: pointer;
}
             <div id="service" class="custom_select flex">
              <h3 class="textfield_label">
                First select
              </h3>
              <div class="select-box">
                <div class="options-container"></div>

                <div id="serviceMode" class="selected">
                  Selecione um Tipo de Serviço
                </div>
              </div>
            </div>
 <div id="faturamento" class="custom_select flex">
              <h3 class="textfield_label">
                Second Select
              </h3>
              <div class="select-box">
                <div class="faturamento-container options-container"></div>

                <div id="selected-faturamento" class="selected">
                  Qual o faturamento mensal?
                </div>
              </div>
            </div>

gif有问题:

enter image description here

0 个答案:

没有答案
相关问题