2017-02-18 120 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级