2016-07-24 3 views
1

私はjqueryの機能を持っている:jQueryとJAVASCRIPT OOP

$(document).ready(function(){ 
$("#expand_label_object").on("click", function(){ 
$(this).toggleClass("col-3"); 
$(this).toggleClass("col-12"); 
$("#expand_label_info").toggleClass("hidden"); 
}); 
}); 

それは単に私に所望の出力を与えることtoggleClassを使用しています。

私は、この関数を使用したいという要素がたくさんありますが、問題はプログラミングの手続き型の方法を使用しているためです。関数を実行したい各要素に対してこの関数を記述する必要があります。例:あなたが見ることができるように

$(document).ready(function(){ 
$("#expand_Date_object").on("click", function(){ 
$(this).toggleClass("col-3"); 
$(this).toggleClass("col-12"); 
$("#expand_Date_info").toggleClass("hidden"); 
}); 
}); 

は変更さ唯一の事は#expand_label_objectと#expand_label_infoでした。

誰も私はこの関数の作業を実行することができるjavascriptでオブジェクトを作成する方法についてのアドバイスを持っていますし、単にタスクを実行できるこの "クラス"の新しいオブジェクトをインスタンス化することができますexample #expand_Date_Objectで提供されている新しい情報を参照してください。

これを処理するjquery用のプラグインを作成する必要があります。 もしそうなら?

  1. オブジェクトを作成し、そのオブジェクトのプロトタイプを作成できますか?
  2. コンストラクタを使用する必要がありますか?
  3. プロトタイプフレームワークでjqueryライブラリをどのように処理できますか?
+0

基本的なHTML構造を表示します。良いチャンスは1つのイベントハンドラといくつかのクラスや他の属性を使って簡単に行うことができます – charlietfl

+0

これは一般的な質問です。マークアップのサンプルを投稿し、正確に何を達成しようとしているのかを明記してください。 – undefined

+1

いいえ、任意の問題でOOPを投げようとしないでください。ここで必要なのは、セレクタをパラメータとして持つ基本関数宣言だけです。 – Bergi

答えて

0

あなたはあなたがOOPのパラダイムに基づいたエレガントなコードを望んでいるようだ

$(document).ready(function(){ 

    function handleClick(selector) { 
    $(this).toggleClass("col-3"); 
    $(this).toggleClass("col-12"); 
    $(selector).toggleClass("hidden"); 
    } 

    $("#expand_label_object").on("click", function() { 
    handleClick.call(this, "#expand_label_info") 
    }); 

    $("#expand_Date_object").on("click", function() { 
    handleClick.call(this, "#expand_Date_info") 
    }); 

}); 
+0

"downvote"の説明はありますか? – guest271314

+0

"downvote"の理由について不思議ですか?投稿時の 'javascript'はOPで記述された要件をどのように満たしていませんか? – guest271314

+1

見たことがないようなطحان.. –

-1

を機能させる、という名前の関数を作成しFunction.prototype.call()を利用し、現在のクリックされた要素にthisを設定する関数を呼び出し、パラメータとしてセレクタ文字列を渡すことができます;もしそうなら、あなたはES6構文から利益を取ることができる:

1.ビルド抽象API:

//- -- JQuery Class 

    class $Class{ 
     constructor(selector,parent){ 
      this.selector=selector; 
      this.parent= parent; 
     } 
     get element(){ 
      return (this.parent)?$(this.selector,this.parent):$(this.selector); 
      } 
     on(event,callback){ 

       this.element.on(event,callback); 
     } 

    } 

    //Common service (contains static methods) 

     class CommonService{ 

      static toggle1(htmlElement){ 
       $(htmlElement).toggleClass("col-3"); 
       $(htmlElement).toggleClass("col-12"); 
       $("#expand_Date_info").toggleClass("hidden"); 

      } 
     } 

2.のAPI:

var exp_label=new $Class('#expand_label_object'); 
exp_label.on('click',function(){ CommonService.toggle1(this)}) 

    // the same of the other code , it will be : 
var exp_date=new $Class('#expand_Date_object'); 
exp_date.on('click',function(){ CommonService.toggle1(this)}) 

希望あなたがターゲットとこのOOPを。

+1

何かのためにコードを不必要に膨らませるような感じです – charlietfl

+0

@charlietfl:私は知っていました。しかし、これは質問の所有者の要件です...だから、もし最悪の事態があれば、それは答えではなく、あなたの言うことですか?どうですか?私は正しい? –

+4

いいえ... Opはそれが実用的であるかどうかを尋ねていましたが、単純な状況を複雑にする努力の無駄です。 OPはXY問題を作成しました – charlietfl