Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有一种方法可以创建一个函数,该函数可以是单击事件,也可以是onload事件,具体取决于主体的类?_Javascript_Jquery - Fatal编程技术网

Javascript 是否有一种方法可以创建一个函数,该函数可以是单击事件,也可以是onload事件,具体取决于主体的类?

Javascript 是否有一种方法可以创建一个函数,该函数可以是单击事件,也可以是onload事件,具体取决于主体的类?,javascript,jquery,Javascript,Jquery,基本上,这个标题说明了这个问题,但情况是这样的(很难用jsbin或其他任何东西进行复制,所以我将尝试在不这样做的情况下解决这个问题) 我有一个只需点击按钮即可调用的函数。单击事件将告诉输出将使用什么字体。但是,在某些页面上,我希望字体由body元素的类声明,而不是单击按钮 我遇到了两个问题 当我试图传递一个参数并接收一个参数时,该参数是一个事件,而不是我想要传递的任何东西 如果我将事件作为第一个参数传递,将要使用的字体作为第二个参数传递,那么我将未定义为字体变量,并且函数无法工作 任何以这种方式

基本上,这个标题说明了这个问题,但情况是这样的(很难用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]);
            });
        }
    });