使用JQuery手动调用事件函数

12
我想知道是否有一个选项可以调用已经分配给jQuery事件的函数。
例如:
``` $("#somediv").change(function() { //do something }); ```
我想能够手动调用最初分配给"somediv"元素的函数。
谢谢。

你尝试过这样写吗?如果(typeof ($("#somediv").change) == 'function') { yourCode(); $("#somediv").change(); } - blejzz
1
@jernej:我不认为那么做可以实现你的需求;$("#somediv").change会给你返回jQuery对象的方法change,而不是你所期望的函数。 - Jacob Mattison
@jernej 在使用 jQuery 时,typeof ($("#somediv").change) 的结果永远'function' - Matt Ball
7个回答

29

使用 trigger 方法:

$("#somediv").trigger("change");

3
注意:这等同于 $("#somediv").change(); - Matt Ball
注意:对于普通对象和除window以外的DOM对象,如果触发的事件名称与对象上的属性名称匹配,jQuery将尝试将该属性作为方法调用,如果没有事件处理程序调用event.preventDefault()。 如果不希望出现这种行为,请改用.triggerHandler()。 - Seyed Hamed Shams

23

你尝试过这个吗?

$("#somediv").change();

4
JQuery 可以触发指定的事件;只需调用 $("#somediv").change()

1
一个简单的方法是将“实际”函数放在Jquery调用之外。因此,您的代码看起来应该像这样:
$("#somediv").change(function() { doSomething(); });

var doSomething = function() {
// actually do something
}

这将使得在脚本的任何地方调用doSomething函数变得非常简单。

好主意。不过,根据你的示例,在我的情况下,我想使用 #somediv 的属性来执行某些操作,因此可能需要将 $(this) 传递到 doSomething 函数中。 - Andy

1

我认为你的意思是在 change(..) 函数外定义该函数。

function whatever() { // do something }

$("#somediv").change(whatever);

然后你可以在其他地方调用你的函数。

至少这是我理解你的问题的方式。


1

如果你不想实际触发改变事件(如上面的先前答案所示),你应该将该函数提取到你可以从多个地方调用的内容中。看起来你已经找到了一个在你的应用程序中可以重复使用的地方,提取它可能是最好的答案。


1
<script type="text/javascript">
window.onload = function () {
    $("#somediv").change();
}
</script>

我想这是你想要做的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接