2017-02-16 115 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

切以下兩行: - '變量$形式= $(本)。家長( '形式');無功data = $ form.serialize();'var var data = $(this).parent()。find('form')。serialize();' –

+0

你的表單中唯一的表單元素是submit按鈕。那麼你期望在這裏發送什麼樣的實際數據?或者,當你添加一個名稱屬性(這是無效的HTML btw。,div沒有名稱屬性)時,你是否覺得div會成爲表單元素?當然不是這樣。如果您想實際提交值,則需要使用表單元素(如input或textarea)。 – CBroe

+0

或者處理按鈕點擊或表單提交。處理兩者都是混淆的祕訣。恕我直言,處理表單提交更整潔。正如CBroe指出的那樣,你的形式沒有任何投入。它顯示了一些信息,但不包括將被序列化以提交表單的控件。 – ADyson

回答

-1

首先,我會改變

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

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

作爲父母()遍歷DOM和選擇所有匹配元素。

其次我會改變

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

$(document).on("submit", "form", function()

確保表單元素的正確選擇。

我也會檢查我的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」類的元素。但是,「項目內容」。這是一個更好的方法,但是因爲你使用jQuery,你可以只使用'.html()'而不是'[0] .innerHTML'。 – ADyson

+0

@ADyson謝謝,我在課堂上編輯了拼寫錯誤。 –