2017-02-18 121 views
0

我有這個腳本,它的工作完美,但問題是我沒有控制代碼結構,因爲它的動態生成。如何通過類使用jQuery獲取div父類輸入的值?

我可以輕鬆地獲得該元素的值(或者無論你怎麼稱呼它如INPUT),但問題是,我的方式獲取價值

$('input:radio[name="meal-356"]').change(function(ev) 

其中名稱=「餐-356」是隨機生成的和我可以控制div父類(不是ID)的好東西,所以我想知道它是否可以從父類的類中獲取元素的值。

如同例如爲了讓我得到的輸入名稱的值=「餐-356」我用這個代碼

$('input:radio[name="meal-356"]').change(function(ev){ 

    if ($(this).val() == 'Burger with fries') { 
     var meal = 20; 
    } 
    else { 
     var meal = 30; 
    } 

    $('#meal').text((meal).toFixed(2)).trigger('change'); 

}); 

因此而不是使用

$('input:radio[name="meal-356"]').change(function(ev) 

我想使用$('.meal-wrapper')以便任何輸入,textarea或該div內的任何形式將具有相同的效果

以下是我的完整腳本:

$(document).ready(function() { 
 

 
    $('input:radio[name="meal-356"]').change(function(ev){ 
 

 
     if ($(this).val() == 'Burger with fries') { 
 
      var meal = 20; 
 
     } 
 
     else { 
 
      var meal = 30; 
 
     } 
 

 
     $('#meal').text((meal).toFixed(2)).trigger('change'); 
 

 
    }); 
 

 
    $('input:radio[name="drinks-123"]').change(function(ev){ 
 

 
     if ($(this).val() == 'Ice Tea') { 
 
      var drinks = 1; 
 
     } 
 
     else if ($(this).val() == 'Coke') { 
 
      var drinks = 1.20; 
 
     } 
 
     else if ($(this).val() == 'Lemonade') { 
 
      var drinks = 2; 
 
     } 
 
     else if ($(this).val() == 'Water') { 
 
      var drinks = 1.75; 
 
     } 
 
     else if ($(this).val() == 'Hot choco') { 
 
      var drinks = 3; 
 
     } 
 
     else if ($(this).val() == 'Hot coffee') { 
 
      var drinks = 1.25; 
 
     } 
 
     else { 
 
      var drinks = 0; 
 
     } 
 

 
     $('#drinks').text((drinks).toFixed(2)).trigger('change'); 
 
    }); 
 

 

 
    $('input:radio[name="extras-781"]').change(function(ev){ 
 

 
     if ($(this).val() == 'Rice') { 
 
      var extras = 10; 
 
     } 
 
     else if ($(this).val() == 'Gravy') { 
 
      var extras = 5; 
 
     } 
 
     else { 
 
      var extras = 0; 
 
     } 
 
     $('#extras').text((extras).toFixed(2)).trigger('change'); 
 
    }); 
 

 
    $('textarea[name="spoon-112"]').keyup(function(ev){ 
 

 
     var spoon = $(this).val().replace(/\n/g, '<br/>'); 
 
\t \t var spoon = spoon*.25; 
 
     $("#spoon").text(spoon).trigger('change'); 
 

 
    }); 
 

 
    $('input:text[name="fork-143"]').keyup(function(ev){ 
 

 
     var fork = $(this).val().replace(/\n/g, '<br/>'); 
 
\t \t var fork = fork*.5; 
 
     $("#fork").text(fork).trigger('change'); 
 
    }); 
 

 

 

 
    $('#meal, #drinks, #extras, #spoon, #fork').on('change', function(e) { 
 
     var total = $('#meal, #drinks, #extras, #spoon, #fork').toArray().reduce(function(acc, val) { 
 
      return acc + +val.textContent ; 
 
     }, 0); 
 
     $('#total').text(total.toFixed(2)); 
 
    }) 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
<h1>Calculator base on radio buttons</h1> 
 
<h2>Question 1: meal</h2> 
 
<div class="meal-wrapper"> 
 
    <label class="radio"><input name="meal-356" value="Burger with fries" type="radio"/>Burger with fries</label> 
 
</div> 
 
<div> 
 
    <label class="radio"><input name="meal-356" value="Chicken with rice" type="radio" />Chicken with rice</label> 
 
</div> 
 

 
<h2>Question 2: drinks</h2> 
 
<div class="drinks-123-wrapper"> 
 
    <input type="radio" name="drinks-123" value="Ice Tea" /> Ice Tea 
 
    <input type="radio" name="drinks-123" value="Coke" /> Coke 
 
    <input type="radio" name="drinks-123" value="Lemonade" /> Lemonade 
 
    <input type="radio" name="drinks-123" value="Water" /> Water 
 
    <input type="radio" name="drinks-123" value="Hot choco" /> Hot choco 
 
    <input type="radio" name="drinks-123" value="Hot coffee" /> Hot coffee 
 
    <input type="radio" name="drinks-123" value="No drinks-123" /> No drinks-123 
 
</div> 
 

 
<h2>Question 3: extras</h2> 
 
<div class="drinks-wrapper"> 
 
    <input type="radio" name="extras-781" value="Rice" /> Rice 
 
    <input type="radio" name="extras-781" value="Gravy" /> Gravy 
 
    <input type="radio" name="extras-781" value="No Extra" /> No Extra 
 
</div> 
 

 
<h2>Question 4: How many extra spoon?</h2> 
 
<div class="spoon-wrapper"> 
 
    <textarea name="spoon-112" rows="3"></textarea> 
 
</div> 
 

 
<h2>Question 5: How many extra fork?</h2> 
 
<div class="fork-wrapper"> 
 
    <input name="fork-143" type="text" value="" placeholder=""/> 
 
</div> 
 

 
<hr /> 
 
<div class="price-wrapper"> 
 
    <b>meal:</b> <span id="meal"></span> 
 
    <div></div> 
 
    <b>drinks:</b> <span id="drinks"></span> 
 
    <div></div> 
 
    <b>extras:</b> <span id="extras"></span> 
 
    <div></div> 
 
    <b>spoon:</b> <span id="spoon"></span> 
 
    <div></div> 
 
    <b>fork:</b> <span id="fork"></span> 
 
</div> 
 

 
<div class="total-wrapper"> 
 
    <h3> 
 
     <b>Total:</b><span id="total"></span> 
 
    </h3> 
 
</div>

+0

你會爲此努力奮鬥在一定程度上因爲對於一些輸入而不是其他輸入的改變是可以的 - 所以,試圖捕獲無線電輸入與例如textarea輸入是一個挑戰 –

回答

0

您試過$('.meal-wrapper :input').change()

而且,只是一個建議,你可以使用切換大小寫輸入元素值。

+0

我還沒試過,我會..也關於你的建議,我要問一個單獨的線程:)我想陣列沒有想到開關案件..我真的noob :( – cryptohustla

+0

好吧,只是試試這個,恢復回來。沒問題,我們都在學習在這裏,這裏的人們太棒了,他們會給你帶來不同的方式,以一種更好的方式做事,我們從來沒有想過這樣做。 –

+0

它在收音機輸入上工作,但沒有在textarea和輸入文本上工作。好的 – cryptohustla

0

添加事件監聽器上的class名稱和觸發change時。然後在回調中檢索選中的值。

$('.meal-wrapper :input').on("change", function(){ 
    var meal = $('.meal-wrapper :radio:checked').val(); 
    // or, $(this).find(:radio:checked).val(); 

    ... 
    ... 

}); 

$(".drinks-123-wrapper :input").on("change", function(){ 
    var drinks = $(".drinks-123-wrapper :radio:checked").val(); 
    // or, $(this).find(:radio:checked).val(); 
    ... 
    ... 
}); 
+0

嘗試應用它,但不工作,也許是因爲我的條件聲明? – cryptohustla

0

好吧,如果我理解正確的你要麼訪問元素時,其母體/ div點擊/更改。 或反之亦然意味着點擊你想要訪問其父(飲料包裝)的輸入收音機-btn。 如果是則是有jQuery中很多方法可以做到這意味着訪問孩子的牆作爲家長既 下面是一些代碼

針對你的情況訪問任何孩子

$("#parent").click(function(){  //#parent = id or class of your parent div which you will click 
$(this).find("#child_id/childclass") //#child_id/childclass= id or class of element you want to access.val()         
}) 

這將是

$(".drinks-wrapper").click(function(){ 
$(this).find('input:radio[name="meal-356"]').attr("checked") 
}) 
//this will return you whether the meal-356 radio checked or not 

,如果你想獲得父母(反之亦然) 然後

<script> 
    <div class="grandfather" value="pawan chand"> 

     <div class="father"> 
      <div class="son"> 
       <div class="grandson"> 

       </div> 
      </div> 
     </div> 
    </div> 


    $(".grandson").click(function(){ 
var grandfather = $(this).parents(".grandfather").val(); // grandfather = pawan chand 
    }) 
</script> 

同樣有一個最接近()函數只允許訪問一個水平像孫子只能訪問兒子,但與父母(),您可以訪問到它的一個級別至第N級