3

我有这样的:不能在一个onchange分配字符串到另一个字符串=()函数

<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); 

警报函数内部工作正常,但他不会分配新的字符串。

alert(string2)显示string2(未定义)。

我想使用string2以外的函数。但我不能,因为它从来没有分配过。但我不知道为什么。

比方说,我想在另一个平变化的功能使用string2 ...

var string3; 
news.onchange = function() 
{ 
    string3 = string2.concat(' how are you'); 
    alert(string3); 
} 

并将其分配给string3。如果我想使用string3以外的交换功能,它是undefined

回答

0

JavaScript有我们所说的'回调'。回调是在设置回调的元素发生操作后执行的功能。因此,只有当您在HTML页面上更改prio元素时,才会执行您的onchange函数。

这意味着您的prio.onchange = function() { ... }将不会执行,除非您转到您的HTML页面,请单击您选择的元素和CHANGE其值。

因此会是怎样执行一次的代码加载到你的浏览器是以下(它不是完全正确的,但将帮助你理解为什么你string2未被指定为您所期待):

var prio = document.getElementById('prio'); 
var string1 = "Hello"; 
var string2 = ""; 
alert(string2); 

你能看到问题吗?对!!!调用alert(string2)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); 
} 
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); 
    } 
相关问题