2013-03-12 40 views
0

多样输入元件我使用MVC3剃刀用以下标记:多重迭代使用jquery

<div class="budget"> 
<!--line item--> 
<div class="budget-row"> 
    <div class="row"> 
     <div class="twelve columns"> 
      <div class="row"> 
       <div class="two mobile-one columns"> 
       <label class="right inline">Item:</label> 
       </div> 
       <div class="ten mobile-three columns"> 
       @Html.TextBox("description[]", "", new { @class = "expand" }) 
       </div> 
      </div> 
      <div class="row"> 
       <div class="two mobile-one columns"> 
       <label class="right inline">Cost:</label> 
       </div> 
       <div class="two mobile-one columns field-left"> 
       @Html.TextBox("amount[]", "0", new { @class = "expand" }) 
       </div> 
       <div class="one mobile-one columns"> 
       <label class="right inline">Markup:</label> 
       </div> 
       <div class="one mobile-one columns field-left"> 
       @Html.TextBox("markup_amount[]", "0", new { @class = "expand" }) 
       </div> 
       <div class="one mobile-one columns field-left"> 
       <select id="markup_type[]" style="display:none;"> 
       <option value="P" SELECTED>%</option> 
       <option value="D">$</option> 
       </select> 
       </div> 
      </div> 
     </div> 
    </div><!--row-->  
</div> 
<!--end line item--> 

    <a class="button radius small success middle" href="#" id="submit">Submit</a> 
</div> 

的“预算” DIV是整体的div时,“预算排”分区可以是一个或多个线。我正在寻找一个迭代捕获每个输入的值。我试过这个:

$("#submit").click(function() { 
    $(".budget input[type=text]").each(function() { 
     alert(this.value); 
    }); 
    return false; 
}); 

坦率地说,尝试了很多东西,在这一点上可能不是很接近。而且这只会返回我的文本框。

感谢

编辑 这将输出代码:

<div class="budget"> 
<!--line item--> 
<div class="budget-row"> 
    <div class="row"> 
     <div class="twelve columns"> 
      <div class="row"> 
       <div class="two mobile-one columns"> 
        <label class="right inline">Item:</label> 
       </div> 
       <div class="ten mobile-three columns"> 
        <input class="expand" id="description__" name="description[]" type="text" value="" /> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="two mobile-one columns"> 
        <label class="right inline">Cost:</label> 
       </div> 
       <div class="two mobile-one columns field-left"> 
        <input class="expand" id="amount__" name="amount[]" type="text" value="0" /> 
       </div> 
       <div class="one mobile-one columns"> 
        <label class="right inline">Markup:</label> 
       </div> 
       <div class="one mobile-one columns field-left"> 
        <input class="expand" id="markup_amount__" name="markup_amount[]" type="text" value="0" /> 
       </div> 
       <div class="one mobile-one columns field-left"> 
        <select id="markup_type[]" style="display:none;"> 
         <option value="P" SELECTED>%</option> 
         <option value="D">$</option> 
        </select> 
       </div> 
      </div> 
     </div> 
    </div><!--row-->  
</div> 
<!--end line item--> 

<a class="button radius small success middle" href="#" id="submit">Submit</a> 
</div> 
+0

alert($(this).val()); – 2013-03-12 23:27:30

+0

警报正在返回值OK - 我当然可以更新语法 - 但我怎样才能获得选择? – 2013-03-12 23:30:01

+0

我可能是错的,但在上述问题的任何地方我都看不到任何''“字段?或者是@ @ Html.TextBox(“markup_amount []”,“0”,new {@class =“expand”})'做了什么? – dev 2013-03-12 23:30:15

回答

0

这是我想出了让你选择的值。不知道这是你所需要的,还是更多。

<div class="row"> 
    <div class="two mobile-one columns"> 
     <label class="right inline">Cost:</label> 
    </div> 
    <div class="two mobile-one columns field-left"> 
     <input type="text" value="1" class="first" /> 
    </div> 
    <div class="one mobile-one columns"> 
     <label class="right inline">Markup:</label> 
    </div> 
    <div class="one mobile-one columns field-left"> 
     <input type="text" value="2" class="second" /> 
    </div> 
    <div class="one mobile-one columns field-left"> 
     <select id="markup_type[]" class="first"> 
      <option value="A" SELECTED>%</option> 
      <option value="B">$</option> 
     </select> 
    </div> 
    <div class="one mobile-one columns field-left"> 
     <select id="test_type[]" class="second"> 
      <option value="Z" SELECTED>%</option> 
      <option value="Y">$</option> 
     </select> 
    </div> 
</div> 

$(document).ready(function() { 
    $("#submit").click(function() { 
     $("select :selected").each(function(){ 
      alert($(this).val()); 
      //get the corresponding input for this select 
      var cName = $(this).parent().attr("class"); 
      var div = $(this).closest(".row"); 
      var input = $("." + cName, div); 
      alert($(input).val()); 
     }); 
     return false; 
    }); 
}); 

您可以查看fiddle here

请注意,我们正在使用类绑定select到输入。在这个例子中,我用class =“first”标记了输入,用class =“first”标记了输入以将它们连接在一起。

让我知道这是否适用于你。

+0

谢谢你的回应。我唯一的问题是,如果我已经迭代了行,如上所述,我如何明确地将文本输入与选择相关联?如果我用2次迭代的场来运行你的小提琴,我会得到1,2,1,2,P,P。这有道理吗? – 2013-03-12 23:46:33

+0

我明白了。你需要的东西稍有不同。让我看看我能做些什么。 – 2013-03-12 23:51:10

+0

更新后,对parent()。parent()。parent()不满意,所以要去查看是否有更好的方法。我当然希望如此... – 2013-03-13 00:05:00