2014-10-03 130 views
-1

我想为表单显示一定数量的输入标记;这应该取决于用户动态选择他们想要的项目数量。如何使用for循环动态呈现多个表单元素

例如,如果用户说他们想要3件物品。我想显示3个输入栏。

我不清楚进行此操作的最佳方法。例如,我能够确定他们从选择的选项有多少项选择:

$(".howmany").change(function(){ 

      var value = $(this).val(); 

} 

但什么是其后进行的正确方法;我是否动态呈现使用为每个选择的输入标签的确切数量:或者预先显示(但隐藏)所有输入标签并仅显示请求的输入标签的确切数量。

我将不胜感激它的一个例子。此刻我只能隐藏整个区域。例如:

var requests = $("#howmany").val(); 

     if (reqeusts < 1){ 
      $('#reqeusts').hide(); 
     } 
     else { 
      $('#reqeusts').show(); 
     } 

但我显然需要能够显示个人窗体标签相应的用户选择的数字。

你好,我想感谢大家的答案。

我非常抱歉,但我忘了提到混淆的原因是输入的值是从数组函数动态提供的。

public function arrayValues() 
        { 
         return $selection = array(
          '0' => 'none' ,' 1' => '1 item' ,' 2' => '2 item' ,' 3' =>' 3 item'); 
        } 

然后,我需要为每个选定的项目数渲染下面的输入选择标记之一。

    <?php echo ' 
        <select id="howmany" name="items[howmany]" />'; 


        foreach ($arrayValues as $key => $value) 
        {  
         echo '<option value="' . $key .'">' . $value . '</option>'; 
        } 
        echo'</select>'; 
        ?> 
+0

_but我显然需要能够相应地显示单个表单标签的数量用户selected._事实并非如此。你需要一个带有“输入”数量可变的“form”。 – melancia 2014-10-03 08:17:43

+0

一个简单的'for loop'追加'inputs'就可以解决你的问题。 – melancia 2014-10-03 08:18:26

+0

嗨MelancialUk。感谢您的答复。我认为问题比简单的for循环更复杂。我没有给出问题中的全部问题。我为错误道歉。需要动态呈现的输入标签是取决于向其馈送的数组值的选择标签。我修改了我原来的问题。我也会问,我的问题不会被下载。我认为这是一个复杂的问题 – 2014-10-03 08:52:17

回答

0
$(".howmany").change(function(){ 

      var value = $(this).val(); // get the number of inputs 
      value = parseInt(value); // make sure it's an integer 
      htmlStr = ""; 
      for (var i = 0; i < value; i++) 
      { 
        htmlStr += "Label " + i +" <input type='text'>"; 
      } 

      $('.container').empty(); 
      $('.container').append(htmlStr); 
} 
0

你需要的东西是这样的:

$('button').click(function() { 
    $('div').empty().append(new Array(+$('input[type=number]').val()+1) 
    .join("<input type='text' placeholder='Type Something'/>")); 
}); 

我希望这给你如何解决你的问题的想法。

DEMO

+0

嗨阿米特。非常感谢你的帮助。我现在正在看它。我忘了提及我需要为数组值赋予输入标签。我纠正了上面的问题。我认为现在的问题是如何将这些数组值输入到您的等式中 – 2014-10-03 08:45:50