创建选项 onClick 属性
Create options onClick attribute
这是我的想法:当我点击 "word1"(或 "word2")时,select 标签会向我显示选项。单击其中一个选项后,我的脚本会更改 "word1"(或 "word2")选项。我可以更新选项,但是一旦我点击其中一个选项,脚本总是会写入最后一个选项。
该脚本为所有选项写入相同的 onClick 属性...
我一直在寻找很多,但我不明白为什么会发生,以及如何解决它。
代码如下:
function updatemyselect(currentElement, optionsList) {
var mySelect = document.getElementById("mySelect");
var i;
//Clear the options
mySelect.options.length = 0;
//Add the options
for (i = 0; i < optionsList.length; i++) {
var option = document.createElement("option");
var newWord = optionsList[i]
option.text = newWord;
option.onclick = function() {
currentElement.innerHTML = newWord;
};
mySelect.add(option);
}
}
<select id="mySelect">
</select>
<p onclick="updatemyselect(this,['Dog','Cat','Fish'])" class="changedWord">Word1</p>
<p onclick="updatemyselect(this,['Cow','Horse','Whale'])" class="changedWord">Word2</p>
提前致谢
首先您需要在每个选项上设置值属性。
之后你可以在 Select 上使用 onChange 事件来显示你的值。
你可以用Jquery来做这个,比较简单
jquery select change event get selected option
您总是获得最后一个选项值的原因是因为您在 onclick
函数中使用 newWord
变量而不是实际值,或引用当前选定的选项。
因此,在您完成循环后,newWord
的值始终等于最后一个选项文本,因此,无论选择哪个选项,当您返回 newWord
,您将获得相同的值(即 "Fish" 或 "Whale")。
相反,尝试在 onclick
函数中使用 currentElement.innerHTML = mySelect.value;
。
您不能在 'select box' 的 'options' 属性 上绑定 'click events'。您需要在 'select element' 上绑定一个 onchange 事件监听器。在更改事件侦听器的回调函数中放置用于更新单词文本的代码逻辑。由于 'change' 事件监听器不在 'updatemyselect' 函数的范围内,您可以将最后单击的元素存储在一个变量中,并在回调函数中使用它来更新所需的单词文本。请参考下面我编辑的代码。
var clickedElement;
function updatemyselect(currentElement, optionsList) {
clickedElement = currentElement;
var mySelect = document.getElementById("mySelect");
var i;
//Clear the options
mySelect.options.length = 0;
//Add the options
for (i = 0; i < optionsList.length; i++) {
var option = document.createElement("option");
var newWord = optionsList[i]
option.text = newWord;
/*option.onclick = function() {
currentElement.innerHTML = newWord;
};*/
mySelect.add(option);
}
}
document.getElementById("mySelect").addEventListener("change", updatePTag);
function updatePTag(){
clickedElement.innerHTML = this.value;
};
<select id="mySelect">
</select>
<p onclick="updatemyselect(this,['Dog','Cat','Fish'])" class="changedWord">Word1</p>
<p onclick="updatemyselect(this,['Cow','Horse','Whale'])" class="changedWord">Word2</p>
谢谢大家。
我没有意识到 currentElement.innerHTML = newWord;
实际上是将同一个变量的值赋予每个 onClick 属性。
我终于这样解决了,虽然我觉得Arun Singh的解决方案更好
function updatemyselect(currentElement, optionsList) {
var mySelect = document.getElementById("mySelect");
var i;
mySelect.onchange= function() {currentElement.innerHTML=mySelect.value;};
//Clear the options
mySelect.options.length = 0;
//Add the options
for (i = 0; i < optionsList.length; i++) {
var option = document.createElement("option");
var newWord = optionsList[i];
option.text = newWord;
mySelect.add(option);
}
}
<select id="mySelect">
</select>
<p onclick="updatemyselect(this,['Dog','Cat','Fish'])" value="a">Word1</p>
<p onclick="updatemyselect(this,['Cow','Horse','Whale'])" value="b">Word2</p>
这是我的想法:当我点击 "word1"(或 "word2")时,select 标签会向我显示选项。单击其中一个选项后,我的脚本会更改 "word1"(或 "word2")选项。我可以更新选项,但是一旦我点击其中一个选项,脚本总是会写入最后一个选项。 该脚本为所有选项写入相同的 onClick 属性... 我一直在寻找很多,但我不明白为什么会发生,以及如何解决它。
代码如下:
function updatemyselect(currentElement, optionsList) {
var mySelect = document.getElementById("mySelect");
var i;
//Clear the options
mySelect.options.length = 0;
//Add the options
for (i = 0; i < optionsList.length; i++) {
var option = document.createElement("option");
var newWord = optionsList[i]
option.text = newWord;
option.onclick = function() {
currentElement.innerHTML = newWord;
};
mySelect.add(option);
}
}
<select id="mySelect">
</select>
<p onclick="updatemyselect(this,['Dog','Cat','Fish'])" class="changedWord">Word1</p>
<p onclick="updatemyselect(this,['Cow','Horse','Whale'])" class="changedWord">Word2</p>
提前致谢
首先您需要在每个选项上设置值属性。
之后你可以在 Select 上使用 onChange 事件来显示你的值。
你可以用Jquery来做这个,比较简单 jquery select change event get selected option
您总是获得最后一个选项值的原因是因为您在 onclick
函数中使用 newWord
变量而不是实际值,或引用当前选定的选项。
因此,在您完成循环后,newWord
的值始终等于最后一个选项文本,因此,无论选择哪个选项,当您返回 newWord
,您将获得相同的值(即 "Fish" 或 "Whale")。
相反,尝试在 onclick
函数中使用 currentElement.innerHTML = mySelect.value;
。
您不能在 'select box' 的 'options' 属性 上绑定 'click events'。您需要在 'select element' 上绑定一个 onchange 事件监听器。在更改事件侦听器的回调函数中放置用于更新单词文本的代码逻辑。由于 'change' 事件监听器不在 'updatemyselect' 函数的范围内,您可以将最后单击的元素存储在一个变量中,并在回调函数中使用它来更新所需的单词文本。请参考下面我编辑的代码。
var clickedElement;
function updatemyselect(currentElement, optionsList) {
clickedElement = currentElement;
var mySelect = document.getElementById("mySelect");
var i;
//Clear the options
mySelect.options.length = 0;
//Add the options
for (i = 0; i < optionsList.length; i++) {
var option = document.createElement("option");
var newWord = optionsList[i]
option.text = newWord;
/*option.onclick = function() {
currentElement.innerHTML = newWord;
};*/
mySelect.add(option);
}
}
document.getElementById("mySelect").addEventListener("change", updatePTag);
function updatePTag(){
clickedElement.innerHTML = this.value;
};
<select id="mySelect">
</select>
<p onclick="updatemyselect(this,['Dog','Cat','Fish'])" class="changedWord">Word1</p>
<p onclick="updatemyselect(this,['Cow','Horse','Whale'])" class="changedWord">Word2</p>
谢谢大家。
我没有意识到 currentElement.innerHTML = newWord;
实际上是将同一个变量的值赋予每个 onClick 属性。
我终于这样解决了,虽然我觉得Arun Singh的解决方案更好
function updatemyselect(currentElement, optionsList) {
var mySelect = document.getElementById("mySelect");
var i;
mySelect.onchange= function() {currentElement.innerHTML=mySelect.value;};
//Clear the options
mySelect.options.length = 0;
//Add the options
for (i = 0; i < optionsList.length; i++) {
var option = document.createElement("option");
var newWord = optionsList[i];
option.text = newWord;
mySelect.add(option);
}
}
<select id="mySelect">
</select>
<p onclick="updatemyselect(this,['Dog','Cat','Fish'])" value="a">Word1</p>
<p onclick="updatemyselect(this,['Cow','Horse','Whale'])" value="b">Word2</p>