2016-06-21 13 views
0

質問は扱いにくいと言われますので、私が説明するように私にご負担ください。複数のデータを一度にフォームで提出する方法

私はNode.js、Express、およびMongoDBを使用しています。ここで

は、フォーム送信のための私のバックエンドのコードです:

router.post('/inputlog', function(req, res) { 
Log.findOne({logTitle: req.body.logTitle}, function(err, existingLog) { 
    if(!existingLog) { 
     req.flash('errors', req.body.logTitle + ' was not found'); 
     return res.redirect('/inputlog'); 
    } 
    if(existingLog) { 
     Lot.findOneAndUpdate({logTitle: req.body.logTitle}, { 
      $push: { 
       OutdoorLogs: { 
        LogInput: { 
         logDate: req.body.logDate, 
         logInput: req.body.logInput 
        } 
       } 
      } 
     }, {safe: true, upsert: false}, function (err, logSuccess) { 
      if(err) { 
       req.flash('errors', 'Log was not inserted due to Error.'); 
       return res.redirect('/inputlog'); 
      } 
      if(logSuccess) { 
       req.flash('success', req.body.logTitle+ ' Log has been updated. '); 
       return res.redirect('/inputLog'); 
      } 
     }); 
    } 
}) 
}); 

だから、すべてこの言葉は何ですか?基本的には、ログを入力するフォームがあります。最初にログのタイトルを追加します。次に、入力したログのタイトルをデータベース(MongoDB)で検索します。そのようなログタイトルが存在しない場合、ユーザーにエラーが送信されます。

ログタイトルが存在する場合、そのログタイトルの配列に 'logDate'と 'logInput'を追加します。

それはすべてうまくいいです。しかし! 複数のログ(複数のlogDateとlogInput)を同じ時間に入力したい場合はどうなりますか?私は設定のフォームを持っている方法は、私だけ入力新しい時間で、この配列1にログインして、ここに参照のための私の形であることができますので、

<form method="POST" action="/inputlog"> 
    <div class='form-group'> 
     <label for="logTitle">Log Title</label> 
     <input type="text" name="logTitle" autofocus class="form-control uppercase" id="logTitle"/> 
    </div> 
    <div class='form-group'> 
     <label for="logDate">Log Date</label> 
     <input type="text" name="logDate" class="form-control logDate" id="logDate"/> 
    </div> 
    <div class='form-group'> 
     <label for="logInput">log Input</label> 
     <input type="text" name="logInput" class="form-control logInput" id="logInput"/> 
    </div> 
    <div class='form-group'> 
     <input type="submit" class="btn btn-default btn-primary pull-right" value="submit"> 
    </form> 

、再び、この形式が設定されている方法一度に入力できるのはログです。一度に20種類のログを入力したい場合は、一度に1つずつ実行する必要があります(ログを入力して、サブミットし、ログを入力し、サブミットしてください...など)。

1回の送信で複数のログ(エントリ)を入力するにはどうすればよいですか?

答えて

0

フォームをリファクタリングしないと、1つの入力が完了すると、追加の入力セットが表示されます。私はonblurを使用して、フォームをチェックして各入力が何らかのテキストを持っていることを確認するすべての入力に対して、追加のフォームを追加する関数を実行するとします。配列のインデックスに対応する各フォームグループのIDを持ち、フィールドを含むオブジェクトをプッシュします。この方法で、後で編集する場合は、サブミットする前に変更できます。

関連する問題