0

単純な表示/非表示のdivとdivにフォームがありますが、フォームを送信すると、リロード時にdivが再び非表示になります。この動作を停止するにはどうすればよいですか?

脚本:

$(function() {
  $('.Mbox').hide().click(function(e) {
    e.stopPropagation();
  });      
  $("#Mbutton").click(function(e) {
    $('.Mbox').animate({ opacity: "toggle" });
    e.preventDefault();
  });

});

Div:

<li><div class="Mbox"><input type="text" id="conversation_username" class="span5"  name="conversation_participant[nome]" placeholder="Para: Nome"/>
 <%= text_area :message, :body, :class => "span5", :rows => 5, :placeholder => "Mensagem" %>
 <%= f.button "Send", :class => "botao" %></div></li>
4

3 に答える 3

2

ページが最初に読み込まれたとき、divが非表示になっているように聞こえます。次に、クリックしてdivを表示し、フォームに入力します。フォームを送信すると、ページが再読み込みされ、divが非表示として再読み込みされますが、引き続き表示する必要があります。

(提供されたコードの他の場所には表示されないため、最初に非表示になっているdivがCSSで制御されていると仮定します)

この場合、2つの選択肢があると思います。

  1. サーバー側で処理します。フォーム送信への応答を作成するときは、返された応答に表示されるようにdivを変更していることを確認してください。

  2. 可能であればクライアント側で処理します。たとえば、フォームにリロード後に入力された値が表示されるが、ページが最初にロードされたときに値が表示されない場合は、JSを記述して、値が含まれている場合にdivを表示できます。形。

また、同じデータで同じページに戻ってきて、同じように表示したい場合は、フォームの送信時にページが完全にリロードされないようにすることも検討します。おそらく、AJAXを介して送信し、ページをまったくリロードしないようにする必要がありますか?

于 2012-07-10T03:47:37.623 に答える
0

あなたは一生懸命頑張っています笑

$(function() {
    $('.Mbox').hide();
    $("#Mbutton").click(function(e) {
        $('.Mbox').show();
    });
 });

詳細を説明しなければ、^^はあなたが求めていることをするようです

于 2012-07-10T03:35:14.463 に答える
0

私があなたを正しく理解している場合、あなたはフォームを送信した後にフォームをラップするDIVを非表示にしようとしています。それは、必要以上に複雑にしたように見えます。

$("#Mbutton").click({
     $(".Mbox").fadeOut(400);
});

これにより、#Mbuttonをクリックした後、DIV.Mboxがフェードアウトするはずです。

于 2012-07-10T03:37:09.640 に答える