1
<form name="form_name" action="/" method="get">
          <% if params["title"].present?%>
            <% if params["title"] == "1" %>
            <input type="checkbox" name="title" onclick="this.form.submit();" value="1" checked> Title <input name="title" type="hidden" value="0" />
            <%else%>
            <input type="checkbox" name="title" onclick="this.form.submit();" value="1"> Title
            <%end%>

            <%else%>
             <input type="checkbox" name="title" onclick="this.form.submit();" value="1">Title
        <%end%> 
    <% if params["description"].present?%>
            <% if params["description"] == "1" %>
            <input type="checkbox" name="description" onclick="this.form.submit();" value="1" checked> Description <input name="description" type="hidden" value="0" />
            <%else%>
            <input type="checkbox" name="description" onclick="this.form.submit();" value="1"> Title
            <%end%>

            <%else%>
             <input type="checkbox" name="description" onclick="this.form.submit();" value="1">Title
        <%end%> 

    </form>

GOAL : 変更されていない他のチェックボックスの状態を維持しながら、onclick を送信するチェックボックスを用意する

クリックするとフォームを送信するチェックボックスがたくさんあります。クリックすると同じページに戻り、新しい GET データが表示されます。上記のコードは一種のハックで、1 つのチェックボックスに対して機能します。しかし、これを行った方法により、複数のチェックボックスでは機能しません。

これはそれを行う方法のようには見えません。正しい答えは、チェックボックスがチェックされているかチェックされていないかをjavascriptまたはjqueryで判断することだと思います。私はこれらのどちらにもあまり慣れていないので、誰かが私を正しい方向に導くことができれば...

4

1 に答える 1

0

問題は冗長な隠し入力です。

      <form name="form_name" action="/" method="get">
        <% if params["title"].present?%>
          <% if params["title"] == "1" %>
            <input type="checkbox" name="title" onclick="this.form.submit();" value="1" checked> Title 
          <%else%>
            <input type="checkbox" name="title" onclick="this.form.submit();" value="1"> Title
          <%end%>
        <%else%>
            <input type="checkbox" name="title" onclick="this.form.submit();" value="1">Title
        <%end%> 
        <% if params["description"].present? %>
          <% if params["description"] == "1" %>
            <input type="checkbox" name="description" onclick="this.form.submit();" value="1" checked> Description 
          <%else%>
            <input type="checkbox" name="description" onclick="this.form.submit();" value="1"> Description
          <%end%>

        <%else%>
           <input type="checkbox" name="description" onclick="this.form.submit();" value="1">Description
        <%end%> 
      </form>

チェックボックスがチェックされていない場合はゼロの値を送信することを意図していますが、ブラウザの良い点は、チェックされていないチェックボックスを送信<% if params["description"].present? %>せず、値をチェックせずにそのような条件が false になることです。

そのような冗長な条件を削除した後のより最適化されたコードは、

      <form name="form_name" action="/" method="get">
        <% if params["title"] == "1" %>
          <input type="checkbox" name="title" onclick="this.form.submit();" value="1" checked> Title 
        <%else%>
          <input type="checkbox" name="title" onclick="this.form.submit();" value="1"> Title
        <%end%>

        <% if params["description"] == "1" %>
          <input type="checkbox" name="description" onclick="this.form.submit();" value="1" checked> Description 
        <%else%>
          <input type="checkbox" name="description" onclick="this.form.submit();" value="1"> Description
        <%end%>
      </form>
于 2013-07-15T08:45:39.697 に答える