2017-08-29 14 views
2

次の事前入力テーブルで変更された値を検出する方法を見つけようとしています。私はMongoDBからデータを取得し、Express-Handlebarsとnodejを使ってデータをHTMLに書き出します。変更された入力を検出するHTML入力テーブルの値

<form action="/someaction" method="post"> 
    <table class="responsive-table-input-matrix"> 
    <thead> 
     <tr> 
     <th>name</th> 
     <th>some setting</th> 
     <th>some setting</th> 
     <th>some setting</th> 
     <th>some setting</th> 
     </tr> 
    </thead> 
    {{# each values }} 
     <tbody> 
      <tr> 
       <td> {{ this.name}} </td> 
       <td><input type="string" style="position: relative;" name="some setting" value={{this.some setting}} autofocus></td> 
       <td><input type="string" style="position: relative;" name="some setting" value={{ this.some setting}}></td> 
       <td><input type="text" style="position: relative;" value="some setting" value={{ this.some setting}}></td> 
       <td><input type="text" style="position: relative;" value="some setting" value={{ this.some setting}}></td> 
       <input type="hidden" name="someid" value={{ this.some id}}> 
      </tr> 
     </tbody> 
    {{/each}} 
    </table> 
      <button type="submit" class="btn btn-success">Submit</button> 
</form> 

私が[送信]ボタンをクリックすると、サーバーはすべての設定を含むオブジェクトを受信します。それから私はMongoDBに書き戻したい。しかし、私は変更されていない値を書き戻したくない。私はオブジェクトを反復することができますが、行は基本的に無制限であるため、サーバーのパフォーマンスに関する問題につながる可能性があります。

特定の行で値が変更されたかどうかを検出して、それを何らかの形で私のサーバーが受信したオブジェクトにマークするかどうかを知りたかったのです。そうすれば、Object全体に1回だけ反復し、変更されたConfigを書き込むことができます。

HTMLやJSに何らかのonChangedがあることがわかりました。しかし、私はそれが直接の変更に使用されているbeeingを見ただけで、私はボタンが押されたときに適用される変更をしたい。

可能であれば、Javascriptを避けたいと思います!

私は何とか達成したいことを何とか表現できたらいいと思います。 ありがとうございます!

+0

ビットは別として、HTMLは文字列のタイプの入力を知らない。代わりにテキストのタイプである必要があります。 – Teemu

+0

JavaScriptを避けることはできません。古い値を保持し、値が変更されたかどうかを比較する必要があります。 –

+0

私はmuchaboutのHTMLを知らないと付け加えなければならない。私はサーバーと私のmongodbを持っており、私はそれのフロントエンドを作ろうとします。それは私の最初のテストthoで働いた!しかし、私はそのTHXを変更します! – Seitrox

答えて

0

各行にdata-属性を付けて、それが変更されているかどうかを確認することができます。所与の行における例えば

<tr id="tr1" data-foo-bar="original"> 
    <td><input type="text" onchange="change();"></td> 
</tr> 

この列内の値は、この関数をトリガ変更された場合:

if (document.getElementById("tr1").dataset.fooBar == "original"){ 
    // hasn't been changed 

} 
else 
{ 
    // it has changed 

} 

function change(){ 
    document.getElementById("tr1").dataset.fooBar = "modified"; 
} 

そしてあなたがこの属性にアクセスすることができ

+0

私は今も似たようなことをしています。私はidでget要素を使用して、テーブルに追加した隠し入力の値を変更します。不幸にも、常に出力オブジェクトのインデックス0の値だけを変更します。 3列目に何か変わったとしても。また、私は自分のnodejsサーバーコードのHTMLの外側にあるデータタグにアクセスできるようにする必要があります。あなたがそれを提案したようにうまくいかない。私の問題をどのように修正できるか知っていますか? – Seitrox

+0

私はこの答えが役に立つと思っていました。申し訳ありませんが、私はあなたを助けるのに十分ではないと思います。 – Lanrex

+0

多くの助けになりました!私はIDの行に対応するディナムナンバーを与えることができました。私はそのインデックスでjsを呼び出します!そして、ブームが欲しいのはそこにあります。 – Seitrox

関連する問題