JavaScript难题

时间:2011-11-08 04:18:29

标签: javascript

我想将JavaScript函数从输入标记移动到<script>标记,但它无效。

这有效:

<input type="text" name="aaa" id="aaa" onkeyup="javascript:this.value=
  this.value.substring(0,1).toUpperCase()+
    this.value.substring(1,this.value.length);
  if (this.value=='') 
    document.getElementById('aaaLabel').innerHTML='AAA';"
/>

这不是:

<script type="text/javascript">
  function FieldOnKeyUp() {
    this.value=this.value.substring(0,1).toUpperCase()+
      this.value.substring(1,this.value.length);
    if (this.value=='') 
      document.getElementById('aaaLabel').innerHTML='AAA'; 
  }
</script>

<input type="text" name="aaa" id="aaa" onkeyup="FieldOnKeyUp()">

有什么区别?

1 个答案:

答案 0 :(得分:6)

this的值不会传递给您的单独函数。实际上,函数中的this设置为window对象。您需要更改为此类型的代码才能将正确的值传递给您的函数:

<input type="text" name="aaa" id="aaa" onkeyup="FieldOnKeyUp(this)">

以及您的代码:

<script type="text/javascript">
function FieldOnKeyUp(el) {
     el.value=el.value.substring(0,1).toUpperCase()+el.value.substring(1); 
     if (el.value=='') {
         document.getElementById('aaaLabel').innerHTML='AAA'; 
     }
}
</script>

以下是展示此代码的示例:http://jsfiddle.net/jfriend00/2dJ6x/