我有这个:
<select id="prio" class="w60">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
如果我选择其他值,则会调用onchange = function()
:
var prio = document.getElementById('prio');
var string1 = "Hello";
var string2 = "";
prio.onchange = function ()
{
prioIndex = prio.options[prio.selectedIndex].text;
switch (prioIndex)
{
case '1': prioIndex = " my Friend";
break;
case '2': prioIndex = " my Sister and Brother";
break;
case '3': prioIndex = " my Mom and Dad";
break;
}
alert(prioIndex);
string2 = prioIndex;
}
alert(string2);
函数内的警报工作正常,但他不会分配新的String。
alert(string2)
显示string2(未定义)。
我想在函数外部使用string2
。但我不能,因为它永远不会被分配。但我不知道为什么。
让我们说,我想在另一个onchange函数中使用string2
...
var string3;
news.onchange = function ()
{
string3 = string2.concat(' how are you');
alert(string3);
}
并将其分配给string3
。如果我想在onchange-function之外使用string3
,那就是undefined
。
答案 0 :(得分:1)
这是因为alert(string2)
不在点击处理程序中,只会执行一次无关紧要prio
被点击。尝试将其移入内部以检查每次点击时string2
的值。
prio.onchange = function ()
{
prioIndex = prio.options[prio.selectedIndex].text;
switch (prioIndex)
{
case '1': prioIndex = " my Friend";
break;
case '2': prioIndex = " my Sister and Brother";
break;
case '3': prioIndex = " my Mom and Dad";
break;
}
alert(prioIndex);
string2 = prioIndex;
alert(string2);
}
答案 1 :(得分:0)
JavaScript有我们称之为'回调'的东西。回调是在设置回调的元素上发生操作后执行的函数。因此,只有当您更改HTML页面上的onchange
元素时,才会执行prio
功能。
这意味着您的prio.onchange = function () { ... }
将无法执行,除非您转到HTML页面,点击您的选择元素并更改其值。
因此,一旦该代码加载到您的浏览器中将会执行以下操作(它不完全正确但会帮助您理解为什么string2
未按预期分配) :
var prio = document.getElementById('prio');
var string1 = "Hello";
var string2 = "";
alert(string2);
你能看到问题吗?对!!!调用string2
时,alert(string2)
为空! :d
您可以通过将string2
传递给回调中的其他功能来执行您想要的操作,例如:
var foo = function ( val ) {
alert('string2 value is: ' + val);
};
prio.onchange = function () {
prioIndex = prio.options[prio.selectedIndex].text;
switch (prioIndex) {
case '1': prioIndex = " my Friend";
break;
case '2': prioIndex = " my Sister and Brother";
break;
case '3': prioIndex = " my Mom and Dad";
break;
}
foo(prioIndex);
}
但是,如果要在两个不同的回调中使用该信息,可以定义一个函数,以便在需要时获取该值。我的意思是:
var string2 = function () {
var prio = document.getElementById('prio');
prioIndex = prio.options[prio.selectedIndex].text;
switch (prioIndex) {
case '1': prioIndex = " my Friend";
break;
case '2': prioIndex = " my Sister and Brother";
break;
case '3': prioIndex = " my Mom and Dad";
break;
}
return prioIndex;
}
var string3;
news.onchange = function () {
string3 = string2() + ' how are you';
alert(string3);
}