我是一个编程新手,我无法弄清楚如何在JQuery中存储一个函数并在多个位置运行它。
我有:
$(function () {
$("div.class").click(function(){
//Doo something
});
$("div.secondclass").click(function(){
//Doo something
});
});
现在2“// Doo somethings”是相同的,我不想再写相同的代码了。
如果我把:
$(function () {
function doosomething ()
{
//Doo something
}
$("div.class").click(doosomething);
$("div.secondclass").click(doosomething);
});
这将在页面加载时运行该功能,而不是仅在单击时运行。
我该如何正确地做到这一点?
谢谢!
答案 0 :(得分:108)
以下内容应该很有效。
$(function() {
// Way 1
function doosomething()
{
//Doo something
}
// Way 2, equivalent to Way 1
var doosomething = function() {
// Doo something
}
$("div.class").click(doosomething);
$("div.secondclass").click(doosomething);
});
基本上,您声明的功能与使用它的范围相同(JavaScript使用Closures来确定范围。)
现在,由于JavaScript中的函数与任何其他对象的行为相同,因此您可以使用doosomething
.click(doosomething);
指定为调用点击的函数
在使用doosomething()
(doosomething
没有()
引用函数但没有调用它)或其他函数调用(在此函数中)调用它之前,您的函数将不会执行case,click
处理程序。)
答案 1 :(得分:28)
我会这样做:
(function($) {
jQuery.fn.doSomething = function() {
return this.each(function() {
var $this = $(this);
$this.click(function(event) {
event.preventDefault();
// Your function goes here
});
});
};
})(jQuery);
然后在准备文件时你可以做这样的事情:
$(document).ready(function() {
$('#div1').doSomething();
$('#div2').doSomething();
});
答案 2 :(得分:18)
function doosomething ()
{
//Doo something
}
$(function () {
$("div.class").click(doosomething);
$("div.secondclass").click(doosomething);
});
答案 3 :(得分:11)
或者(我最好说),你可以这样做:
$(function () {
$("div.class, div.secondclass").click(function(){
//Doo something
});
});
答案 4 :(得分:5)
您也可以这样做 - 因为您希望在任何地方使用一个函数,您可以通过直接调用JqueryObject.function()来实现。例如,如果要创建自己的函数来操作元素上的任何CSS:
jQuery.fn.doSomething = function () {
this.css("position","absolute");
return this;
}
打电话的方式:
$("#someRandomDiv").doSomething();
答案 5 :(得分:2)
这是最混淆的解决方案吗?我不相信jQuery的想法就是创建这样的代码。还有一种假设,即我们不想冒泡事件,这可能是错误的。
在doosomething()
之外简单移动$(function(){}
将使其具有全局范围并保持代码简单/可读。
答案 6 :(得分:0)
我在现代 JavaScript 中使用的简单方法:
$(
$("div.class").click(() => {doosomething});
$("div.secondclass").click(() => {doosomething});
);