jquery:在选择更改时按名称调用函数

Per*_*cat 11 javascript jquery function

我试图通过.onchange选择名称来调用函数,但没有任何反应.当在属性之后描述函数时,它可以工作.

这不起作用

HTML:

<select id="numb">
  <option value="1">1</option>
  <option value="2">2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

脚本:

<script type="text/javascript">
    $('#numb').change(testMessage);
</script>

<script type="text/javascript">
    function testMessage(){
        alert('Hello');
    }
</script>
Run Code Online (Sandbox Code Playgroud)

这个工作

HTML:

<select id="numb">
  <option value="1">1</option>
  <option value="2">2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

脚本:

<script type="text/javascript">
    $('#numb').change(function(){
      alert('Hello')
    });
</script>
Run Code Online (Sandbox Code Playgroud)

编辑:

好的,对于那些说我要在同一个脚本中包含该功能的人.这是不可能的,因为该testMessage()函数位于HTML 的外部.js脚本中<head>.

Sel*_*gam 21

这是因为在将testMessage其绑定到change事件时未定义处理程序.

如果它在如下所示的相同脚本上下文中,它应该工作,

<script type="text/javascript">
    $('#numb').change(testMessage);

    function testMessage(){
        alert('Hello');
    }
</script>
Run Code Online (Sandbox Code Playgroud)

代码内部<script></script>从顶部逐行执行,第一个testMessage内部不存在函数<script></script>.

你有几个选择,

  1. 将它放在一个匿名函数中,让您的脚本testMessage稍后解析该函数.[根据擎天柱的回答]

    <script type="text/javascript">
      $('#numb').change(function () { 
         testMessage
      });
    </script>
    <script type="text/javascript">
       function testMessage(){
          alert('Hello');
       }
    </script>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 包括testMessage上面script绑定testMessage的函数的脚本,如下所示,

    <script type="text/javascript">
    function testMessage(){
        alert('Hello');
    }
    </script>
    <script type="text/javascript">
      $('#numb').change(testMessage);
    </script>
    
    Run Code Online (Sandbox Code Playgroud)


Opt*_*ime 5

而是尝试,

<script type="text/javascript">
    $('#numb').change(function(){
       testMessage();
    });
</script>
Run Code Online (Sandbox Code Playgroud)

  • @Perocat匿名函数延迟了`testMessage`的解引用.届时,它将被定义. (2认同)