可以' this.value'实际上,在触发事件的函数调用中成功使用?

时间:2014-05-26 23:30:19

标签: javascript function arguments

我放弃了!从W3C Web示例,"开始Web编程 HTML,XHTML和CSS"作者:Jon Duckett," DOM脚本 - 网页设计 JavaScript和文档对象模型 - 第二版"杰里米 Keith和Jeffrey Sambells," JavaScript,The Definitive Guide"通过 David Flanagan == ALL建议,' this.value'可以作为参数传递给JavaScript函数。

这是触发器:

<td id="yearOfDraw">
  <select id="selectedYear" onchange="storeValue('y', this.value)">;
    <option selected="selected" value="">Select Year
    </option>
    <script type="text/javascript">
      yearOption();
    </script>
  </select>
</td>

...以上,以及以下,我试过没有成功;

storeValue()作为库函数==文字,&#34; y&#34;,但是被传递但是 不是这个。值。

头元素中的

storeValue()==相同的结果......

onchange选项:

    onchange="storeValue('y', " + this.value)>;  // breaks the code.
    onchange="storeValue(this.value, 'y')">; // this.value is not passed.
    onchange="storeValue(this.value)">; // ...nothing is passed
    onchange="storeValue(alert('this.value is: ', this.value)">; //displays \
the value selected, just doesn't pass it to the function.

(来自&#34; stackoverflow-JavaScript将参数this.value传递给函数&#34;)

    onchange="storeValue('y', " + this.options[this.selectedIndex].value)>; // breaks the code.

我没有看到&#34;范围&#34;作为一个问题,因为这个&#39;将是一个指针 Element对象,选择,因此,Global&#39;在范围&#39;到被叫 功能。但这种假设并不能解释这个问题。相等, 如何制作,&#39; this.value&#39;,全球范围内?

有什么想法吗?

谢谢, JungeBleu

2 个答案:

答案 0 :(得分:1)

我更愿意发表评论,但没有足够的代表。 :)

无论如何,您似乎通过javascript填充选项。如果是这种情况,storeValue不知道DOM中填充的额外选项,因为yearOption()仅在页面加载后填充DOM。

但是,如果你要在第一个位置拥有所有选项,或者在storeValue填充DOM之后绑定yearOption(),可能使用匿名函数,它可能会起作用。

修改

  1. BTW,这就是为什么我们使用像jquery这样的库,以便我们可以在以后加载DOM之后附加事件 - 以一种非常简单的方式:)
  2. 此外,如果您在示例中只有一个选项,onchange将不会触发...
  3. yearOption()到底做了什么?看到这个小提琴:http://jsfiddle.net/LsY3Y/1/

答案 1 :(得分:0)

您可能正在使用IE 8或更低版本(或者在怪癖模式或版本8或更低版本的兼容模式下使用某些更新版本),其中没有值属性的选项不返回值返回空字符串,而不是选项的文本。在其他(W3C兼容)浏览器中,将返回文本。

以下“有效”:

<script>
    // Simple function to report values
    function storeValue(s, v) {
      console.log(s + ':' + v);
    }

</script>

<select onchange="storeValue('y', this.value)">
  <option selected>Select Year
  <option value="2000">2000
  <option value="2000">2001
  <option>2002              <!-- Option without a value attribute -->
</select>

关于您的其他问题:

  

我不认为“范围”是一个问题,因为'this'将是一个指向Element对象的指针,select,因此,Global'in scope'到被调用的函数。

仅在全局代码中是全局的,它始终在当前的执行上下文中得到解决。在全局代码中,它是全局对象,在任何其他上下文中,它是通过如何调用函数或使用bind来设置的。

内联事件处理程序代码包含在函数中,当调用该函数时,其 this 将设置为该元素。因此,即使内联代码看起来是全局的,它实际上是功能范围的,并且拥有它自己的本地这个,它不是全局对象。

  

如何制作,'this.value',Global in scope?

你不能,见上文。 : - )