2016-09-02 91 views
1

在meteor中,我在提交表單後動態創建了一張卡片。動態卡包含顯示和隱藏按鈕。當我點擊顯示選項按鈕時,隱藏部分顯示所有卡片而不是該特定卡片。問題是卡正在動態創建,所以我認爲這是問題。如何使功能分別工作到每張卡。如何阻止功能一次工作?

這裏我附上代碼:

<div id="newActionCard"> 
    {{#each newaction}} 
       <div class="workflowcard"> 
       <div class="module-card"> 
        <div class="res-border"></div> 
        <div class="card-img"></div> 
        <div class="res-content"> 
        <div class=" assigned-team">{{team}}</div> 
        <div class=" newaction-name">{{action_title}}</div><hr> 
        <div class="description">{{description}}</div> 
        <div class=" due-on">Due on:{{d_date}}</div><hr> 
        <div class="subcontent"> 
         {{> actioncardsubcontent}} 
        </div> 
        <div class="reqext"> 
          {{> requestextensioncard}} 
       </div> 
        </div> 
        <div class="due"> 

         Due on: 
         <div> 
          <span class="day-stamp">THU</span><br> 
         <div class="date-stamp">26</div> 
         <div class="month-stamp">AUG 
         </div> 
         </div> 
        </div> 
        </div> 
    <div class="btn-box newaction"> 
     <button type="button" class="cancelsub" >New Action</button> 
     <button type="submit" class="createbtnsub" >Show Options</button> 
    </div> 
    <div class="btn-box showoption"> 
     <button type="button" class="hideoption" style="display:none">Hide Options</button> 
     </div> 

       {{/each}}                                    
     </div> 

在JS我已經寫在events..now隱藏和顯示功能如何在時間停止的功能,所有的牌。

這裏是我的JS:

Template.workflow.events({ 

    "click .createbtnsub" : function() { 
     $(".subcontent").show(); 
    $('.createbtnsub').hide(); 
     $('.cancelsub').hide(); 
     $('.hideoption').show(); 
     $('.requestextension').show(); 

    }, 
    "click .hideoption": function(){ 
     $('.subcontent').hide(); 

    }, 



     "click .hideoption": function(){ 
     $(".subcontent").hide(); 
     $('.cancelsub').show(); 
     $('.createbtnsub').show(); 
     $('.requestextension').hide(); 
     $('.hideoption').hide(); 
     $('.reqext').hide(); 
    }, 



    "click #createActionBtn": function(){ 

     $('#createAction').hide(); 
     $('.editw').show(); 
     $('.hidew').show(); 
    }, 
}); 

Template.actioncardsubcontent.rendered = function(){ 
    this.$(".subcontent").hide(); 
}; 

Template.requestextensioncard.rendered = function(){ 
    this.$(".reqext").hide(); 

}; 

Template.workflow.helpers({ 
    getWorkflow: function(){ 
     return Workflow.find(); 
    }, 
    user: function(){ 
return Meteor.users.find({}); 
}, 
getNewaction: function(){ 
     return Newaction.find(); 
    }, 

}); 
+0

你可以發佈你的JS,因爲這是在功能。然而在猜測它應用於所有卡片時,聽起來好像你還沒有調用過event.current.Target或索引引用。但是在你發佈JS之後我肯定會知道的。 – NicholasByDesign

+0

我附上我的JS .. – sailu

回答

0

請參閱以下內容並根據需要進行調整的選擇:

 "click .showoption": function(event){ 
     $(event.currentTarget).next('button').show(); 
    } 

這將選擇同級元素工作,但是作爲小費,我會建議重寫您的template.helper將數據庫中的卡數據返回到更具體的數據。

類似於基於索引或ID的動態類,因此您的類/ ID名稱將返回如下.showoption-12kjddfse4。然後,您可以獲取當前目標的屬性並將其應用於您的js選擇器。

此外,作爲一種探索爲什麼所有按鈕都顯示,你是使用類選擇器,這是爲了抓住元素/節點組。這也是爲您的用例創建更具體的類名/ ID的另一個原因。

因此,在你的類名,你可以做類似

<button class="showoption" id="{{_id}}">button</button> 
<button id="hiddenoption-{{_id}}" class="hiddenoption">button</button> 

然後選擇您的內容如下會更容易些:

'click .showoption'(event) => { 
    let id = event.currentTarget.getAttribute(id); 
    document.getElementById('hiddenoption-'+id).style.display = 'block'; 
} 
+0

它不起作用 – sailu

+0

嗯...我測試了它。當你運行它時,控制檯是否會出現錯誤? – NicholasByDesign

+0

您是否還嘗試創建動態ID或類作爲我建議作爲第二個選項? 你可以分開html按鈕/鏈接點擊和隱藏的選項顯示遠離不綁定到功能的HTML。這將有助於澄清哪些按鈕是特定於您的問題。 – NicholasByDesign