2016-09-07 17 views
0

私はユーザーから選択する必要があるデータがあります。値はforEachで選択されたリスト項目を投稿するフォームでラップされます。foreach内で選択されたフォームを投稿する方法

<ul id="results"> 
    <% records.forEach(function(value) { %> 
     <li> 
      <form id="detailsForm" action="/search/detail" method="post"> 
       <div> 
        Employee Id: <%= value.netId %> 
        Name: <%= value.FirstName%> <%= value.LastName %> 
       </div> 
      </form> 
     </li> 
     <% }); %> 
    </ul> 

javascriptのは簡単です:

<script type="text/javascript"> 
    $("#results").on('click', 'li', function() { 
     document.getElementById("detailsForm").submit(); 

    }); 
</script> 

問題はレコードが選択されているに関係なく、最初の結果は、常にポストに渡されたものであることです。フォーム名はforEachで同じなので、意味があります。

document.getElementById("detailsForm").submit(); 

クリックしたリスト項目のみを投稿するには、より良い方法が必要です。私は別のやり方で$(this).text()を取得しようと考えましたが、空白とキャリッジリターンがあります(明確には示されていません)。本当にデータをシリアル化する必要があります。

答えて

0

あなたの問題はループ内でidを使用していると想像できます。 idはページ上で一意である必要があります。生成されたHTMLには、同じIDを持つ複数のフォームが含まれている可能性があります。したがって、JavaScript getElementByIdでは、常に最初の文字を取得します。

EDIT: したがって、フォーム要素のIDを削除してください。 そのようなJavaScriptを変更してください:

$("#results").on('click', 'form', function() { 
     $(this).submit(); 
}); 
+0

はい、同意します。しかし、$(this).text()を使用して、選択したリスト項目の実際のテキストを確かに得ることができるので、フォームを選択する方法があると仮定しました。おそらくループ内でフォームを使用しない別のアプローチがありますか?これはすぐに話題をオフに戻すように始まります... –

+0

私の投稿を編集しました。それはうまくいくはずです。 –

+0

フォームのループは、ページ上のいくつかのフォームに問題はありません。独自のフォームを選択する方法を見つけるだけでした。あなたの最初のアプローチではもちろん$(this).text()を介してテキストを取得することができますが、document.getElementByIdを使用すると、クリックされた要素内ではなくフォームの上から下へDOMを再度検索します最初のフォームのみが見つかりました。この説明が役立つことを願っています! –

関連する問題