jQuery"该参考文献“;加载事件后未设置
jQuery "this-reference" not set after load event
我不明白为什么函数foo中的"this reference"是否未使用#searchval设置,当由load事件调用时?
在keyup事件中对foo的函数调用有效,但在load事件中调用无效,因为未设置此引用。
示例:
<body>
<form action="" method="post">
<input type="text" name="test" value="<?=$_POST['test']?>" id="searchval">
<select id="names" size="3">
<option value="1">WTF1</option>
<option value="2">WTF2</option>
<option value="3">WTF3</option>
</select>
<input type="submit">
</form>
</body>
<script type="text/javascript">
$(document).ready(function() {
var names = $('#names option').clone();
function foo() {
//Change the code to $('$searchval').val(); make it work
var val = $(this).val();
$('#names').empty();
names.filter(function(idx, el) {
return val === '' || $(el).text().indexOf(val) >= 0;
}).appendTo('#names');
}
$('#searchval').bind('keyup', foo);
$('#searchval').load(foo());
});
</script>
</html>
您使用"foo"中的返回值设置处理程序,而不是函数本身。
应该是:
$('#searchval').load( foo );
传递foo()
时,首先调用的是函数—( )
就是这么做的。通过只传递函数引用,您可以获得所需的效果。
编辑—最重要的是,正如在一条评论中所指出的,您正试图为一个永远不会得到这样事件的元素设置一个"加载"处理程序。你认为是什么导致了这一事件?也许你想要的是"改变"而不是"加载"。
再次编辑—如果您只想模拟在"keyup"事件发生时按原样调用"foo",您可以做两件事:
您可以使用"triggerHandler":
$('#searchval').triggerHandler('keyup');
您可以使用"呼叫":
foo.call($('#searchval')[0]);
当然,在这两种情况下,你都不会得到一个类似于真实事件的"事件"对象,但"foo"无论如何都不在乎这一点。
相关文章:
- 在onmouseover事件中更改图像,并为每个事件设置中断/间隔
- 创建元素并将事件设置为类时 JQuery 重复事件
- jQuery image.Load 事件不触发,如果 image.src 从 PageShow 事件设置并返回到同一页面
- 如何对链式事件设置条件
- 使用鼠标悬停/悬停事件设置隐藏元素的值
- 如何根据索引中控件的onchange事件设置mvc 5视图中隐藏字段的值
- 如何将事件设置为最顶级的父React样式
- 在jquery UI中为多个事件设置一个回调
- 对Textbox KeyDown事件设置jQuery自动完成
- 将单击事件设置为此事件添加的元素
- JQuery:基于点击事件设置属性
- 使用循环将事件设置为DOM对象
- 通过onclick事件设置变量
- 用CanJS为文档上触发的事件设置一个全局监听器/控制器
- 根据周视图中的第一个和最后一个事件设置minTime和maxTime
- 套接字.在客户端为该事件设置侦听器之前,服务器发出事件
- 为控制器中的存储事件设置侦听器
- 如何在html中使用onchange事件设置下拉值中的链接
- Javascript在构造函数中将dom事件设置为prototype方法
- 编写jQuery函数的好方法是为特定事件设置全局变量