【问题标题】:Javascript how do I give a variable the value of my button dynamically?Javascript如何动态地给变量我的按钮的值?
【发布时间】:2022-01-11 12:07:21
【问题描述】:

我正在尝试创建一个过滤器,以查看最适合人们的鞋子。 我正在创建多个问题,每次按下按钮时,我都希望将该按钮的值添加到我的 url 变量中。 我似乎无法弄清楚如何获取我按下的按钮的值并将其添加到 url 变量中,并在值之间使用 &。有人可以帮帮我吗?

var Test = [
  [
    'Whats your size?', ['41', 'url1'],
    ['42', 'url2'],
    ['43', 'url3']
  ],
  [
    'What color would you like?', ['Red', 'url1'],
    ['Blue', 'url2'],
    ['Yellow', 'url3'],
    ['Green', 'url4']
  ],
  [
    'What brand would you like?', ['Adidas', 'url1'],
    ['Nike', 'url2'],
    ['Puma', 'url3']
  ]
];

var url = '#';

count = 1;
var questionNumber = 0;
var button = document.getElementById('answer');
var question = document.getElementById('question');
var answerButton;

function check() {
  //question 
  console.log(Test[questionNumber][0]);
  for (let y = 1; y < Test[questionNumber].length; y++) {
    // url
    url = url + Test[questionNumber][y][1];
    // button
    var btn = document.createElement('button');
    btn.value = Test[questionNumber][y][1];
    btn.className = "filter_anwser";
    btn.textContent = Test[questionNumber][y][0];
    btn.setAttribute('data-el', 1);
    button.appendChild(btn);
    // class
    answerButton = document.querySelectorAll('.filter_anwser');
    // console.log(url);
  }

  // question
  var txt = document.createElement('h1');
  txt.textContent = Test[questionNumber][0];
  question.appendChild(txt);

  console.log(".....");
  // adds 1 to question to see a different question
  questionNumber++;
}
<div id="question"></div>

<div id="answer"></div>

<button onclick="check()">Next</button>

【问题讨论】:

  • 什么确切不起作用?你有什么努力让它发挥作用?在for 循环的每次迭代中可能会覆盖answerButton 是否是一个问题?
  • 我的主要问题是我无法弄清楚如何将我按下的按钮的值添加到变量中。我尝试使用事件监听器来执行此操作,但它不起作用。

标签: javascript html variables url button


【解决方案1】:

您可以推送并稍后从对象生成 URL

我个人会使用尺寸、品牌等来代替 url1、url1、

function getLink(parms) {
  return "https://wwww.yourserver.com/shoes#"+parms.join(",")
};

button.addEventListener("click",function(e) {
  const tgt = e.target;
  parms.push(tgt.value);
  console.log(getLink(parms))
})

var Test = [
  [
    'Whats your size?', ['41', 'url1'],
    ['42', 'url2'],
    ['43', 'url3']
  ],
  [
    'What color would you like?', ['Red', 'url1'],
    ['Blue', 'url2'],
    ['Yellow', 'url3'],
    ['Green', 'url4']
  ],
  [
    'What brand would you like?', ['Adidas', 'url1'],
    ['Nike', 'url2'],
    ['Puma', 'url3']
  ]
];

// let parms = {};
let parms = []

count = 1;
var questionNumber = 0;
var button = document.getElementById('answer');
var question = document.getElementById('question');
var answerButton;
function getLink(parms) {
/*  const url = new URL("https://wwww.yourserver.com/shoes");
  for (let key in parms) {
    url.searchParams.append(key,parms[key])
  }
  return url.toString()
  */  
  return "https://wwww.yourserver.com/shoes#"+parms.join(",")
};

button.addEventListener("click",function(e) {
  const tgt = e.target;
  //parms[tgt.value] = tgt.textContent;
  parms.push(tgt.value);
  console.log(getLink(parms))
})

function check() {
  //question 
  // console.log(Test[questionNumber][0]);
  for (let y = 1; y < Test[questionNumber].length; y++) {
    // button
    var btn = document.createElement('button');
    btn.value = Test[questionNumber][y][1];
    btn.className = "filter_anwser";
    btn.textContent = Test[questionNumber][y][0];
    btn.setAttribute('data-el', 1);
    button.appendChild(btn);
    // class
    answerButton = document.querySelectorAll('.filter_anwser');
    // console.log(url);
  }

  // question
  var txt = document.createElement('h1');
  txt.textContent = Test[questionNumber][0];
  question.appendChild(txt);
  // adds 1 to question to see a different question
  questionNumber++;
}
<div id="question"></div>

<div id="answer"></div>

<button onclick="check()">Next</button>

旧答案

let parms = {};

function getLink(parms) {
  const url = new URL("https://wwww.yourserver.com/product");
  for (let key in parms) {
    url.searchParams.append(key,parms[key])
  }
  return url.toString()
};


button.addEventListener("click",function(e) {
  const tgt = e.target;
  parms[tgt.value] = tgt.textContent;
  console.log(getLink(parms))
})

【讨论】:

  • 非常感谢!我只有一个问题。它显示了这样的变量: [{"url3":"43"},{"url1":"Red"},{"url3":"Puma"}] 但我需要创建它的实际链接。我想这是因为它在一个数组中。有没有办法让它看起来像这样:url3&url1&url3?
  • 是的。但你不想?size=41&amp;brand=Adidas吗?
  • 我愿意,但我会更改网址。这只是我在实际项目中实施之前的一个测试项目。
  • 我已更新为使用一个对象并添加了一个 getLink
  • 嗯,我正在使用它,因为我需要使用的链接已经存在并且我无法更改它们,所以我需要使用它。但是新的非常好用,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 2018-08-24
  • 2012-10-19
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多