2011-05-29 138 views
0

我有這2種功能,並希望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'); 

}; 

正如你可能已經猜到,這是行不通的。問題是爲什麼?你能否給我一個關於變量處理的快速課程?謝謝你們,我知道你是最棒的!

回答

3

最簡單的方法是定義你的函數取一個參數:

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

你可以接着用ckbmovestate(this)從代碼中調用它。


如果你真的想能夠使用的功能中this關鍵字時,它的名字,你可以這樣做。這不值得,但是可能會有一段時間你想這樣做。要達到此目的,您需要使用callapply。在這裏,無論是將工作:

ckbmovestate.call(someElement); 

這發出的someElement價值ckbmovestate。在ckbmovestate內部,您將可以使用關鍵字this訪問該值。因此,在你的代碼上面,下面的調用將工作:

ckbmovestate.call(this); 

這是幾乎可以肯定的事情過於複雜針對這種情況,但是 - 更容易定義的參數。

0

更改函數以使用參數。

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

因爲你不接受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(); 
    }); 
相關問題