我刚开始为我当前的项目学习Jquery。我对Jquery对象的选择器和监听器感到困惑。
$("input").change(function() {
alert( "Handler for .change() called." );
});
http://api.jquery.com/change/的精确副本......我从" .target"更改了选择器输入"。
但是,任何输入元素都不会被更改事件处理。
我收到此错误。我很确定有输入名称的元素
"未捕获的TypeError:无法读取属性'更改' null functions.js:378 (匿名函数)"。
逻辑是否有问题或是否存在语法错误。我把这个错误缩小了很多,但我仍然没有看到问题?
我测试答案,所有答案都是正确的。 当通过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(...
当页面是动态的时,可以再次调用处理程序调用者。这是一个简单但不好的解决方案。
答案 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." );
});
中的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>
它们是相同的,只是第一个写的字符较少。