0

基本上标题说明了问题,但情况是这样(很难用 jsbin 或其他任何东西复制,所以我将尝试不这样做来解决)。

我有一个在单击按钮时调用的函数。点击事件将告诉输出将使用什么字体。但是,在某些页面上,我希望字体由 body 元素的类声明,而不是单击按钮。

我遇到了两个问题。

  1. 当我尝试传递参数并接收参数时,参数是一个事件,而不是我想要传递的任何内容。
  2. 如果我将事件作为第一个参数传递,而我想要的字体作为第二个参数传递,我会得到未定义的字体变量,并且该函数不起作用。

以这种方式使函数变得灵活的任何帮助都会帮助我很多。

编辑:这是我所拥有的简化版本

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);

}
4

3 回答 3

2

不是将您的函数直接传递给事件注册,而是传递一个匿名函数,然后使用所需的参数调用您的函数。

所以,而不是这样:

$("#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);
});
于 2012-11-12T19:42:46.147 回答
0

试试这个大小:一个函数,如果给定一个参数,设置要使用的字体。如果未设置参数,则读取字体的正文标记。

于 2012-11-12T19:42:35.820 回答
0
$(function () {
    if ($('body').hasClass('your class for onload change')) {
        // change font
    } else {
        $('button').click(your_function);
    }
});

编辑:

如果您想this在您的函数中使用并希望它在第一种情况下引用 body 并在第二种情况下引用另一个 dom 元素,您可以使用callapply

$(function () {
    if ($('body').hasClass('your class for onload change')) {
        fontSelection.apply($('body').get(0), [font]);
    } else {
        $('button').click(function () {
            fontSelection.apply(this, [font]);
        });
    }
});
于 2012-11-12T19:50:46.780 回答