2017-02-16 10 views
-1

私はページに複数のフォームがあり、それらはJinja2とFlaskで生成され、各フォームには独自のIDがあり、各フォームにボタンがあります。ボタンをクリックしてボタンが実際に配置されているフォームの値を取得したいと思います。しかし、私はフォームをシリアル化しようとすると、それは空です。すべてのconsole.log行は、各ボタンが実際にそれが置かれているフォームを取得しない、正常に動作し提出フォームには値がありません

HTML:。

<form id='{{ "item-"+item.articleNr }}' class="itemTemplate"> 
    <div class="thumb"> 
     <img style="width: 200px;height: 200px;" src="{{ url_for('static',filename='images/'+item.image) }}"> 
    </div> 
    <div class="contentWrapper"> 
     <div class="content" id="item-content"> 
      <label id="articleNameBlock" name="articleName">{{ item.articleName }}</label> 
      <div class="articleNrBlock" name="articleNr">{{ item.articleNr }}</div> 
      <div class="eanBlock" name="ean">{{ item.ean }}</div> 
      <div class="articleCodeBlock" name="articleCode">{{ item.articleCode }}</div> 
      <div class="articleColorBlock" name="color">{{ item.Color }}</div> 
      <div class="priceBlock" name="price">{{ item.Price }}</div> 
      <div class="buttons"> 
       <button id="addLabel" class="ui-btn ui-btn-inline btn btn-success" type="submit">Label Aanvragen</button> 
      </div> 
     </div> 
    </div> 
</form> 

JS:

$(document).ready(function(){ 

    $('.btn-success').on('click',function(){ 
     console.log('The addButton is clicked.'); 
     var $form = $(this).parents('form'); 
     var data = $form.serialize(); 
     console.log('Form '+ $form.attr('id')); 
     console.log(data) 
    }); 

    //when the form is submitted 
    $('form').submit(function (evt) { 
     evt.preventDefault(); //prevents the default action 
    }); 
}) 
+0

カットの2行:ここでのソリューションです - '変数$フォーム= $(この).parents( '形式は'); VAR –

+0

あなたのフォームにある唯一のフォーム要素は、送信ボタンです(フォームの要素は、送信ボタンです)。 。実際のデータはここに送信されると思われますか?または、名前属性を追加するとdivがフォーム要素になるという印象を受けていますか(無効なHTML btw。divにはname属性がありません)?それは当然のことではありません。実際に値を送信する場合は、inputやtextareaなどのフォーム要素を使用する必要があります。 – CBroe

+0

ボタンをクリックするか、フォーム送信を処理します。両方を扱うことは、混乱のレシピです。フォームの送信を処理するIMHOはほんの少しです。 CBroe氏が指摘したように、フォームには入力がありません。いくつかの情報を表示しますが、フォームを送信するためにシリアライズされるコントロールには表示されません。 – ADyson

答えて

-1

まず私は

を変更します

var $form = $(this).parents('form');

両親として

var $form = $(this).closest('form');

から10

()は、DOMをトラバースし、一致するすべての要素を選択します。

第二に、私は、フォーム要素が正しく選択されていることを確認するために$(document).on("submit", "form", function()

$('form').submit(function (evt)

を変更すると思います。

整形式である場合はHTMLをチェックし、フォームタグ内のフォームタグは機能しません。

1

CBroeのヒントのおかげで、私は本当に間違ったアプローチをしていました。私はコードを変更しました。

HTML::

<div id='{{ "item-"+item.articleNr }}' class="itemTemplate"> 
    <div class="thumb"> 
     <img style="width: 200px;height: 200px;" src="{{ url_for('static',filename='images/'+item.image) }}"> 
    </div> 
    <div class="contentWrapper"> 
     <div class="content" class="itemContent"> 
      <label class="articleNameBlock" name="articleName">{{ item.articleName }}</label> 
      <div class="articleNrBlock" name="articleNr">{{ item.articleNr }}</div> 
      <div class="eanBlock" name="ean">{{ item.ean }}</div> 
      <div class="articleCodeBlock" name="articleCode">{{ item.articleCode }}</div> 
      <div class="articleColorBlock" name="color">{{ item.Color }}</div> 
      <div class="priceBlock" name="price">{{ item.Price }}</div> 
      <div class="buttons"> 
       <button class="ui-btn ui-btn-inline btn btn-success" type="submit">Label Aanvragen</button> 
      </div> 
     </div> 
    </div> 
</div> 

JS:

$('.btn-success').on('click',function(){ 
    console.log('The addButton is clicked.'); 
    var $item = $(this).closest('.itemContent'); 
    var $elements = $item.children(); 
    var x = $item.children('.articleNameBlock')[0].innerHTML; 
    var articleName = $elements[0].innerHTML; 
}); 
+0

あなたのコードはあなたのHTMLと一致しません。あなたの例では、 "itemContent"クラスの要素はありません。しかし、 "item-content"があります。これはより良いアプローチですが、jqueryを使用しているので、 '[0] .innerHTML'の代わりに' .html() 'を実行するだけです。 – ADyson

+0

@ADysonありがとう、私はクラスのスペルミスを編集しました。 –

関連する問題