JAvascriptコールバック関数練習およびカスタムtoggle関数を使用して作成

5883 ワード

JAvascriptコールバック関数練習およびカスタムtoggle関数を使用して作成
昨日符号化の时に1つの业务の需要に出会ったのはAページで1つのボタンをクリックしてBページに着いて、Bページは1つの確定ボタンがあって、buttonを取り消して、クリックして確定してBページから选んだデータをAページに持ち帰って、クリックしてキャンセルしてAページに帰って、同僚にコンサルティングして、コールバックの関数の方式でこの机能を実现することを决めて、これは初めてこのような方法を使って、记录します;1つの要素に2つの関数をバインドする必要があり、2つの関数を切り替えると、jqueryのtoggle()メソッドが思い浮かび、結果的に失効し、自分でtoggle()メソッド、ソースアドレスを書いてみました
大体の考え方.
/**
*init   B     ,testCallBack A     , testCallBack     init  ,  data          ,     ,javascript       
*/
var init = function (callback){
        if(!(typeof callback === "function")){throw Error("type error")}
        var json = [{id:1,name:"  "},{id:2,name:"  "}];
        callback(json);
    };
    var testCallBack = function(){
      init(function(data){
      console.log(data); //[{id:1,name:"  "},{id:2,name:"  "}]
      });
    }

Bページで初めてbuttonをクリックしてある要素を選択し、もう一度クリックして削除する必要があるので、以前はjqueryにtoggle()の方法が実現できましたが、今はありません.そこでbuttonにデフォルトのvalueを設定し、切り替えをクリックするとvalueを変更し、value値を判断することでその方法を選択したいと思います.
<button value="0" id="test_button">  button>
$("#test_button").bind("click",function(){
var val= $("#test_button").attr("value");
if(val===0){
    function a(){};
    $("#test_button").attr("value",1);
}else{
function b(){};
    $("#test_button").attr("value",0);
}
});

この方法は良いlowを感じて、もっとネット上で探して、stackoverflowの上で1つの方法の方法の住所を見ました
$.fn.toggleClick = function(){

    var functions = arguments ;

    return this.click(function(){
            var iteration = $(this).data('iteration') || 0;
            functions[iteration].apply(this, arguments);
            iteration = (iteration + 1) % functions.length ;
            $(this).data('iteration', iteration);
    });
};

しかし、私はこの方法をjqueryのextendの方法と書きたくありません.結局、現在のページだけで使います.そこで、jqueryの$定義を思い出して、真似しました.
var MytoggleClick = function(id){
        this.id = id;
    };
    MytoggleClick.prototype.toggle = function(){
        var functions = arguments ;
        return this.id.click(function(){
            var iteration = $(this).data('iteration') || 0;
            functions[iteration].apply(this, arguments);
            iteration = (iteration + 1) % functions.length ;
            $(this).data('iteration', iteration);
        });
    };

これで、終わりました.ソースアドレス、最近よくソースコードを見て、収穫が大きいと感じて、