将变量发送到另一个函数

Sending a variable to another function

本文关键字:另一个 函数 变量      更新时间:2023-09-26

我有这两个函数,希望1用指定的变量执行另一个:

function ckbmovestate() {
    $(this).css("-webkit-transform", "translate(53px, 0px)")
    };
function initcheckbox(){
    var togglebox = "<div class='toggle_box'><div class='switch'></div></div>";
    $('input[type=checkbox]').css('display','none');
    $('fieldset[data-input-type=checkbox]').append(togglebox);
    $('fieldset:has(:checkbox:checked)').each(function(){
        $(this).find('.switch').attr('data-state', 'on');
        ckbmovestate($(this))
    });
    $('fieldset:has(:checkbox:checked)')
    $('fieldset:not(:has(:checkbox:checked))').find('.switch').attr('data-state', 'off');
};

正如你可能猜到的,这是行不通的。问题是为什么?你能给我上一堂关于变量处理的速成课吗?谢谢你们,我知道你们是最棒的!

最简单的选项是定义函数以获取参数:

function ckbmovestate(element) {
    $(element).css("-webkit-transform", "translate(53px, 0px)")
}

然后,您可以使用代码中的ckbmovestate(this)调用此函数。


如果您真的希望能够在调用函数时在函数中使用this关键字,您可以这样做。在这里不值得,但可能会有一段时间您想要这样做。要实现这一点,您需要使用callapply。在这里,任何一个都可以:

ckbmovestate.call(someElement);

这将someElement的值发送到ckbmovestate。在ckbmovestate中,您可以使用关键字this访问该值。因此,在上面的代码中,以下调用将起作用:

ckbmovestate.call(this);

然而,对于这种情况,这几乎肯定会使事情过于复杂——定义参数要容易得多。

因为您不接受ckbmovestate 中的参数

如果你不想更改太多代码,ckbmovestate函数应该是这样的:

function ckbmovestate(element){
   element.css("-webkit-transform", "translate(53px, 0px)");
}

如果你经常使用ckbmovestate函数,我建议你制作自己的小插件,你喜欢这样做;

$.fn.ckbmovestate = function(){
$(this).each(function(){
   $(this).css("-webkit-transform", "translate(53px, 0px)");
});
}

在jquery中,在问题中代码中的每个循环中,您可以编写以下内容:

 $('fieldset:has(:checkbox:checked)').each(function(){
        $(this).find('.switch').attr('data-state', 'on')
               .ckbmovestate();
    });

更改函数以使用参数。

function ckbmovestate( x ) {
    x.css("-webkit-transform", "translate(53px, 0px)")
};