2012-04-15 18 views
0

を変化させたときの私は自分のページ上のメッセージを持っているとしましょう/非表示を表示する要素をバインドしますjQueryの:その内容は

<div class="message one">Here is some text.</div> 
... 
<div class="message two">Here is other text for something else.</div> 

私はメッセージ内のテキストを置いてもよいいずれかのイベントがたくさんある、またはそれをクリアしてください。

今私は、メッセージを表示しているかどうかをチェックし、必要に応じて状態を変更するすべてのメッセージ送信関数呼び出しもチェックしています。つまり、この基本ロジックの重複がたくさんあります。

メッセージdivが変更されたときにトリガーされるバインドを設定したいので、空に設定するとスライドし、空からテキストに設定するとスライドします。

可能でしょうか、もしそうなら、どうですか?

このリンクあたり

答えて

3

、これはjQueryのではサポートされていない「突然変異イベント」と呼ばれることになります。Detect element content changes with jQuery

私は単に一つの場所にロジックを統合するヘルパー関数を作成することをお勧めしたいです。例:

function updateElement(selector, newText) 
{ 
    $(selector).text(newText); 
    if (newText == '') $(selector.slideUp()); 
    else $(selector.slideDown()); 
} 
+0

、それを私にビート:) 1 – Dale

+0

を私が見る、私は適応することができると思いますこれは、重複の多くをカットする。リンクと提案をありがとう! – Andrew

1

ここでは、私の頭の上から何かであり、あなたが探しているまさにではなく、divのテキストを更新するときに呼び出す関数である、それは変更する必要でしょうdivの別々のクラスからクラス:単一のクラスへの「メッセージ1」が「message_one」

<script> 
    $(function(){ 

     function show_message(class, message) 
     { 
      var $div = $('div[class='+class+']'); 

      $div.slideUp(250, function(){ 

       if (message.length > 0) 
       { 
        $div.html(message); 
        $div.slideDown(250); 
       } 
      }); 
     } 

     // example of calling this 

     $('button').click(function(){ 
      // hide the div 
      show_message('message_one', ''); 
     }); 

     $('someotherbutton').click(function(){ 
      // this will slideup and then slidedown 
      show_message('message_two', "<p>Here's my message.</p>"); 
     }); 

    }); 
</script> 
0

はこれを試してみてください。

$("div").live("change", function() { 

    if ($(this).text().length == 0) { 

     $(this).slideUp(); 

    } else { $(this).slideDown();} 

}); 
+0

これがうまくいくかどうか知りたいのですが、うまく動作しません。このアプローチについて確かですか? – Marc

+0

残念ながら、私はこの特定の機能のためにこのイベントハンドリングを試していませんでした。変更イベント.live()、.bind()の代わりに、これは動作するはずです。 – undefined

+0

実際これは私が最初に試したものですが、うまくいきませんでした。 APIによると: "このイベントは要素、