13

我试图通过.onchange选择的名称调用一个函数,但没有任何反应。当该功能在属性后被描述时,它就起作用了。

这不起作用

HTML:

<select id="numb">
  <option value="1">1</option>
  <option value="2">2</option>
</select>

脚本:

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

<script type="text/javascript">
    function testMessage(){
        alert('Hello');
    }
</script>

这行得通

HTML:

<select id="numb">
  <option value="1">1</option>
  <option value="2">2</option>
</select>

脚本:

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

编辑:

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

4

7 回答 7

26

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

如果它位于如下相同的脚本上下文中,它应该可以工作,

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

    function testMessage(){
        alert('Hello');
    }
</script>

里面的代码<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>
    
  2. 包括具有testMessage上述script绑定 testMessage 的功能的脚本,如下所示,

    <script type="text/javascript">
    function testMessage(){
        alert('Hello');
    }
    </script>
    <script type="text/javascript">
      $('#numb').change(testMessage);
    </script>
    
于 2013-08-14T18:27:13.040 回答
6

而是尝试,

<script type="text/javascript">
    $('#numb').change(function(){
       testMessage();
    });
</script>
于 2013-08-14T18:26:08.483 回答
2

工作 Jsfiddle 试试这个:

<script type="text/javascript">
    $('#numb').on('change',testMessage);
</script>
于 2013-08-14T18:28:17.073 回答
1

试试这个并放在同一个脚本标签中:

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

        function testMessage(){
            alert('Hello');
        }
    });
</script>
于 2013-08-14T18:28:01.620 回答
0

我认为您对该功能的引用尚不存在,这是您可以做到的两种方式。我将命名空间版本作为建议,因为它可能有助于清理您的代码。

HTML:

<select id="numb">
  <option value="1">1</option>
  <option value="2">2</option>
</select>

脚本:

// 命名空间和使用代理

<script type="text/javascript">
    var project = project || {};
    project = {
        testMessage: function (event) {
           alert('Hello');
        }
    };

    $('#numb').change($.proxy(project.testMessage, project));
</script>

// 刚刚声明

<script type="text/javascript">
    function testMessage(){
      alert('Hello');
    }

    $('#numb').change(function(event) {
       testMessage();
    });
</script>

如果您的方法在另一个文件中,请确保将该文件包含在具有事件绑定的文件之前。您是否收到任何控制台错误?

于 2013-08-14T18:32:32.273 回答
0

您必须在更改函数上定义回调。

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

    function testMessage(){
        alert('Hello');
    }
</script>

那应该可以解决您的问题。

于 2013-08-14T18:25:57.203 回答
0

每当您更改值时,您都可以获得该值。

<select id="numb" onchange="Selecteditems()">
  <option value="1">1</option>
  <option value="2">2</option>
</select>

 var Selecteditems = function () {
            var items= $('#numb').val();
alert(items)
          
        }
于 2021-10-05T06:04:06.283 回答