2011-10-27 11 views
1

こんにちは私はトリガーの#toggleshowと表示されるdivの#showで動作するトグルスクリプトを持っています。私のjQueryトグルスクリプトを短くしてください

私はこれを複数使用していますので、IDの末尾に数字の接尾辞を持つスクリプトがあります。 #toggleshow01、#show01などがあります。この関数を実行します

私のスクリプトは次のとおりです。問題は、私はインスタンスごとにこのスクリプトを複製する必要がある

$('#toggleshow').live('click', function() {$('#show').slideToggle('slow', function() {});}); 

、すなわち

$('#toggleshow').live('click', function() {$('#show').slideToggle('slow', function() {});}); 
    $('#toggleshow00').live('click', function() {$('#show00').slideToggle('slow', function() {});}); 
    $('#toggleshow01').live('click',function() {$('#show01').slideToggle('slow', function() {});}); 
    $('#toggleshow02').live('click',function() {$('#show02').slideToggle('slow', function() {});}); 
    $('#toggleshow03').live('click',function() {$('#show03').slideToggle('slow', function() {});}); 

これらは私が生成するのに使用しています変数です接尾辞

var numToggle = 0; 
var numShow = 0;   
var toggleTrigger = $('<a id="toggleshow'+ "0" + numToggle++ +'" class="toggle_trigger actions">&nbsp;</a>'); 
var menuForm = $('<form id="menu_edit_form'+ "0" + numForm++ +'" class="menu_creation_form"></form>'); 

可能であれば、このスクリプトを1行に減らしてください。

+1

あなたはこれらすべての '#のtoggleshow'要素にクラスを追加し、内部の姉妹'#のshow'に移動して、より良い全体の多くを行うことができますイベントハンドラ。あなたが1つのライナーをすることができます。しかし、正確な解決策はHTMLレイアウトに依存します。そしてなぜあなたは 'ライブ 'を使用していますか? – Jon

+0

こんにちは、それは良い音、私はトグル機能がそれなしで動作していなかったので、ライブを使用しています。私は非常に複雑なことが起こっている、あなたはフィドルを見ることができますhttp://jsfiddle.net/clintongreen/edmCZ/4/私は簡単​​な質問を維持しようとしていたので、私はearilerを投稿しませんでした。乾杯。 –

+0

こんにちは、私は作業中のフィドルです。申し訳ありません、以前は投稿していませんでしたが、それはかなり気が狂っていました。乾杯。 http://jsfiddle.net/clintongreen/edmCZ/4/ –

答えて

1

私は個人的には "showX" に "toggleshowX" マッピングのようなものをやって嫌い。我々は、最近、データを保存するためのより良い方法があります。あなたは、たとえば、あなたのリンクは次のようになりかもしれない:

<a class="toggle_trigger actions" data-target="#show00">&nbsp;</a> 

これはコールバックで$(this).data('target')を使用して関連情報に基づいてターゲットを取得することができます。 1行のコードで

$('.toggle_trigger').live('click', function() { 
    var target = $(this).data('target'); 
    $(target).slideToggle('slow', function() {}); 
}); 

$('.toggle_trigger').live('click', function() {$($(this).data('target')).slideToggle('slow', function() {});}); 
+0

こんにちは、この理論は2つのIDを使用するよりも良い方法ですが、私はそれを実装し、#showに対応するターゲットを得ましたが、トグル関数はトリガーしません。これは、私がhttp://jsfiddle.net/clintongreen/edmCZ/4/で作業しているフィドルです。スクリプトセクションの下にすべての機能があります。上部に大きなお尻のプラグインがあります。 –

+0

こんにちは、申し訳ありませんが、前に入力ミスを犯しましたが、閉じると3回開きます。なぜこのようなことが起こるのか?ありがとうございます –

+0

最新のjsfiddleを投稿して、どのように動作しているか確認できますか? –

0

「toggleShow」の各クラスに「toggleShow」のクラスを指定します(例:<div class="toggleShow">)。次にそれぞれがそれぞれ「ショー」のクラスを「表示」します。そして、あなたは簡単に行うことができます

$(".toggleShow").live("click", function() {$(".show", this).slideToggle("slow");});

は、私は正直に言うと、私はそれをテストしていないと言うが、それはうまく動作するはずですよ。

EDIT:

$(".toggleShow").live(
    "click", 
    function() { 
    $(".show", this).slideToggle("slow"); 
    } 
); 
+0

これは、*すべての*トグルが*すべての*ショーで機能するようにします。 – Jon

+0

申し訳ありませんが、何らかの理由で私は "show"が "toggleShow"の子だと仮定しました。 Woops。これを無視してください。 –

0

このです方法:

が読みやすいフォーマット済み?

$(id^='toggleshow').live('click', function() { 
    $suffix = this.attr('id').substr(10); 
    $('#show'+$suffix).slideToggle('slow'); 
}); 
+0

こんにちは、これを試してみましたが、トグル機能を起動しません。ありがとう –

+0

@Clinton - 申し訳ありませんが、私は最初のセレクタを台無しにしました。やってみよう。 –

+0

ありがとうございました。月曜日まで待つ必要があります。すべてのコードは動作していますが、私はそれを打ち明けるでしょう。乾杯:) –

0

私はあなたが1行で行うことはできないと思います。 live()を使用するよりもおそらくこれを行うより良い方法がありますが、私はあなたのロジックを少しきれいにして、少し保守性にしました。私はまたあなたのHTMLやあなたが達成しようとしているアイデアを持っていないので、塩の粒でこれを取る。

 (function() { 
      $(document).ready(function() { 
       var items = new Array(), 
        idprefix = "toggle"; 

       for (var i = 0; i < 4; i++) { 
        items.push("show0" + i); 
       } 
       $.each(items, function() { 
        $('#' + idprefix + this).live('click', function() { 
         $('#' + this).slideToggle('slow'); 
        }); 
       }); 
      }) 
     })() 
関連する問題