Jquery选择器和事件监听逻辑?

时间:2014-05-21 13:28:56

标签: javascript jquery event-handling document-ready dynamic-html

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

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

http://api.jquery.com/change/的精确副本......我从" .target"更改了选择器输入"。

但是,任何输入元素都不会被更改事件处理。

我收到此错误。我很确定有输入名称的元素

"未捕获的TypeError:无法读取属性'更改' null functions.js:378 (匿名函数)"。

逻辑是否有问题或是否存在语法错误。我把这个错误缩小了很多,但我仍然没有看到问题?

------ ------ EDIT

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

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

执行以下代码时

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

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

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

除此之外, 就我而言,

我使用

生成一些输入
document.anElement.innerHTML = "<foo></foo>"

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

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

display:none

因此,当文档准备就绪时,jquery引擎可以读取该元素。并且可以在到来时显示。

或者

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

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

3 个答案:

答案 0 :(得分:1)

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

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

尝试使用以下内容:

$(function () {

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


});

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

答案 1 :(得分:1)

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

执行此操作的步骤:

创建DOM元素

 <input type="text" />

加载DOM时,调用Javascript代码

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

以下是代码http://jsfiddle.net/s3n57/

中的jsfiddle

答案 2 :(得分: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>

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