0

我刚刚开始为我当前的项目学习 Jquery。我对 Jquery 对象的选择器和侦听器感到困惑。

$("input").change(function() {
  alert( "Handler for .change() called." );
});

http://api.jquery.com/change/的这个精确副本......我将选择器从“.target”更改为“input”。

但是,没有一个输入元素由 change 事件处理。

我得到这个错误。我很确定有输入名称的元素

“未捕获的类型错误:无法读取空函数的属性‘更改’。js:378(匿名函数)”。

是逻辑有问题还是语法错误。我把错误缩小了这么多,但我仍然没有看到问题?

- - - 编辑 - - -

我测试答案,所有答案都是正确的。当事件处理程序/侦听器通过 jquery 选择器分配给元素时。

$("selectorStatement").EventHandlerShortCut(function() {
  //Some code
});

当下面的代码执行时

$("input").change // Change handler for ALL INPUT elements

Jquery引擎获取所有输入元素(!!在那个时刻声明并存在的所有输入元素-执行的时刻处理程序-!!)

在那之后,如果生成了新元素,处理程序将无法识别。唯一可以防止这种情况发生的是使用 $(document).ready ,它将在创建整个文档后调用代码。正如@Henrik Peinar、@Chandrika Prajapati、@GZ、@Gaurav、@Mzn 在他们的回答中提到的......

除此之外,就我而言,

我通过使用生成一些输入

document.anElement.innerHTML = "<foo></foo>"

文件准备好后使用。这种情况可以有两种方法。

此 foo 元素可以在文档呈现时生成。通过使用

display:none

因此,当文档准备好时,jquery 引擎可以读取该元素。并且可以在出现时可见。

或者。

$("fooSelector").handlerType(...

当页面是动态的时,可以再次调用处理程序调用者。这是一个简单但糟糕的解决方案。

4

3 回答 3

1

听起来您的选择器没有返回任何结果(null)。

要验证在标记准备好时调用此函数,请在文档完全加载时执行语句。

尝试使用以下内容:

$(function () {

$("input").change(function() {
  alert( "Handler for .change() called." );
});


});

$(function() { ...}) 等价于 $(document).ready(function() { ...});

于 2014-05-21T13:33:31.777 回答
1

正如评论中所建议的,请确保当元素已存在于 DOM 中时调用此函数。

步骤:

创建 DOM 元素

 <input type="text" />

加载 DOM 时,调用 Javascript 代码

$("input").change(function() {
  alert( "Handler for .change() called." );
});

这是您代码中的工作jsfiddle http://jsfiddle.net/s3n57/

于 2014-05-21T13:35:16.173 回答
1

我认为你的评论Should these lines be at the bottom of the page? (after input elements declared)是正确的。

$("input")将让 jQuery 检查 DOM(文档对象模型)并获取所有输入元素。你没有,因为 DOM 尚未构建。所以你在思考正确的方向。

一般的做法是等到文件准备好。在 jQuery 中,这非常简单,您几乎可以在任何地方输入代码,如下所示:

<script>
$(function(){
    //do "on document ready" things.

});
</script>

请注意,上面的代码是表达以下内容的奇特方式:

<script>
    $(document).ready(function(){
       //do "on document ready" things.

    });
</script>

它们是相同的,只是第一个要写的字符更少。

于 2014-05-21T13:35:53.910 回答