3

我有这个:

<select id="prio" class="w60">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

如果我选择另一个值,onchange = function()则调用 an:

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在另一个 onchange 函数中使用...

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

并将其分配给string3. 如果我想string3在 onchange-function 之外使用它是undefined.

4

2 回答 2

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);
     }
于 2016-01-07T15:33:52.100 回答
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);
}
于 2016-01-07T19:20:35.320 回答