Javascript 是否有一种方法可以创建一个函数,该函数可以是单击事件,也可以是onload事件,具体取决于主体的类?
基本上,这个标题说明了这个问题,但情况是这样的(很难用jsbin或其他任何东西进行复制,所以我将尝试在不这样做的情况下解决这个问题) 我有一个只需点击按钮即可调用的函数。单击事件将告诉输出将使用什么字体。但是,在某些页面上,我希望字体由body元素的类声明,而不是单击按钮 我遇到了两个问题Javascript 是否有一种方法可以创建一个函数,该函数可以是单击事件,也可以是onload事件,具体取决于主体的类?,javascript,jquery,Javascript,Jquery,基本上,这个标题说明了这个问题,但情况是这样的(很难用jsbin或其他任何东西进行复制,所以我将尝试在不这样做的情况下解决这个问题) 我有一个只需点击按钮即可调用的函数。单击事件将告诉输出将使用什么字体。但是,在某些页面上,我希望字体由body元素的类声明,而不是单击按钮 我遇到了两个问题 当我试图传递一个参数并接收一个参数时,该参数是一个事件,而不是我想要传递的任何东西 如果我将事件作为第一个参数传递,将要使用的字体作为第二个参数传递,那么我将未定义为字体变量,并且函数无法工作 任何以这种方式
function fontSelection(font) {
var self = $(this),
inputOne = $('li:eq(0) input').val(),
inputTwo = $('li:eq(1) input').val(),
inputThree = $('li:eq(2) input').val(),
resultOne = $('div:eq(0)'),
resultTwo = $('div:eq(1)'),
resultThree = $('div:eq(2)');
font = font || $('div.font').attr('title').toLowerCase();
resultOne.removeClass().addClass(inputOne + ' someclass ' + font);
resultTwo.removeClass().addClass(inputTwo + ' someclass ' + font);
resultThree.removeClass().addClass(inputThree + ' someclass ' + font);
}
试试这个size:一个函数,如果给它一个参数,它可以设置要使用的字体。如果未设置参数,则读取字体的body标记。不是将函数直接传递给事件注册,而是传递一个匿名函数,然后该函数使用所需参数调用函数 因此,不是这样:
$("#myButton").click(callMyFunction);
使用此选项可以指定所需的确切参数:
$("#myButton").click(function(e) {
callMyFunction(myParam1, myParam2);
});
如果要在函数中保留this
的值,则需要像这样使用.call()
在函数中显式地适当设置它:
$("#myButton").click(function(e) {
fontSelection.call(this, myParam1, myParam2);
});
或者,将其作为参数传递,并在函数中使用参数,而不是this
:
$("#myButton").click(function(e) {
fontSelection(this, myParam1, myParam2);
});
编辑:
如果您想在函数中使用this
,并想在第一种情况下在body上引用它,在第二种情况下在body上引用另一个dom元素,那么可以使用调用或应用
$(function () {
if ($('body').hasClass('your class for onload change')) {
fontSelection.apply($('body').get(0), [font]);
} else {
$('button').click(function () {
fontSelection.apply(this, [font]);
});
}
});
向我们展示您尝试了什么(如何定义函数,如何将其附加为处理程序…)这看起来很简单,但我不确定我是否完全理解了问题(太多的单词,没有足够的代码)。。。无论如何,您可以轻松地在javascript中测试参数的类型(jQuery经常使用这个技巧)。知道args的大小也很容易。就像Jan Dvorak说的,粘贴您尝试过的任何东西,这样我们就可以帮助您。好的,我添加了我函数的基本代码。我尝试了这个,但不起作用。在我的函数体中,我将设置如下字体:font=font | |$(elem).attr('title').toLowerCase()。当使用body的类时,该函数仍希望计算undefined@user1798630-您可能在fontSelection
函数中丢失了“this”的值。请参阅我在答案末尾添加的部分,以使此
在函数中正确设置或作为参数传入。我在上面添加了我的函数。当我尝试这个时,我无法调用未定义的小写。。。(只有当您看到上面的函数时,这才有意义)
$(function () {
if ($('body').hasClass('your class for onload change')) {
fontSelection.apply($('body').get(0), [font]);
} else {
$('button').click(function () {
fontSelection.apply(this, [font]);
});
}
});