根据类别从输入类型=文件切换到文本字段

时间:2017-07-27 19:28:43

标签: php jquery html css forms

我想根据所选类别从input type = file切换到文本字段。整个表单将通过相同的PHP代码处理上传功能。

这是我的表格:

<form action="" method="POST" enctype="multipart/form-data" class="uploadForm">
    	<div>
    		<select name="category">
    			<option value="pho" selected>Images</option>
    			<option value="vid">Video</option>
    			<option value="pap">Paper</option>
    		</select>
    		<input type="file" name="files[]" multiple id="file"/>
    		<p>Title: <input type="text" name="f-title" id="f-title" cols="40" rows="5" class="fullWidth"/>
    		</p>
    		<p>Description:</p>
    		<textarea type="text" name="f-desc" id="f-desc" cols="40" rows="5" class="fullWidth"></textarea>
    		<p>
    			<label class="radio">Portfolio</label>
    			<input type="radio" name="folio" value="TRUE" checked/> <span class="radio">Yes</span>
    			<input type="radio" name="folio" value="FALSE"/> <span class="radio">No</span>
    		</p>
    
    		<input type="submit" value="Upload" id="submit"/>
    	</div>
    </form>

如您所见,我想处理3种类型:图像,PDF和视频。对于视频类型,我希望能够在表单中粘贴youtube链接,该链接最终将保存在数据库中并显示在网站的库中。但是,如果我只是添加链接,文件上传将为空。另一种方式是:如果我添加图像,链接将为空。

在这些文档类型之间切换的最佳方法是什么? PS:Javascript或jquery很好!

3 个答案:

答案 0 :(得分:2)

&#13;
&#13;
(function($) {
  $(document).ready(function() {
    $('select')
      .change(function() {
        switch ($(this).val()) {
          case 'pho':
            $('#file').removeClass('hidden');
            $('#form-description').addClass('hidden');
            break;
          case 'vid':
          case 'pap':
            $('#form-description').removeClass('hidden');
            $('#file').addClass('hidden');
            break;
        }
      });
  });
})(jQuery)
&#13;
.hidden {
  display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 <form action="" method="POST" enctype="multipart/form-data" class="uploadForm">
    <div>
      <select name="category">
        <option value="pho" selected="">Images</option>
        <option value="vid">Video</option>
        <option value="pap">Paper</option>
      </select>
      <input type="file" name="files[]" multiple="" id="file" />
      <p>Title:
        <input type="text" name="f-title" id="f-title" cols="40" rows="5" class="fullWidth" />
      </p>
      <div id="form-description" class="hidden">
        <p>Description:</p>
        <textarea type="text" name="f-desc" id="f-desc" cols="40" rows="5" class="fullWidth"></textarea>
      </div>
      <p>
        <label class="radio">Portfolio</label>
        <input type="radio" name="folio" value="TRUE" checked="" />
        <span class="radio">Yes</span>
        <input type="radio" name="folio" value="FALSE" />
        <span class="radio">No</span>
      </p>
      <input type="submit" value="Upload" id="submit" />
    </div>
  </form>
&#13;
&#13;
&#13;

最好的方法是根据选择的类别显示适当的元素

答案 1 :(得分:0)

如果你试图避免使用javascript,我认为有一种方法可以只使用css来做你想做的事情。它将涉及为媒体,文本等添加不同的输入,但它们可见或不可见,具体取决于用户选择的类型。我只能使用单选按钮使用纯CSS进行此工作 - 我无法进行选择工作:

<style>
    .oneVisible, .twoVisible, .threeVisible {
      display: none;
    }

    #mediaType[value=one]:checked ~ .oneVisible {
      display: inline-block;
    }
    #mediaType[value=two]:checked ~ .twoVisible {
      display: inline-block;
    }
    #mediaType[value=three]:checked ~ .threeVisible {
      display: inline-block;
    }
</style>

<input type="radio" name="mediaType" id="mediaType" value="one" checked />One<br />
<input type="radio" name="mediaType" id="mediaType" value="two" />Two<br />
<input type="radio" name="mediaType" id="mediaType" value="three" />Three<br />

<input type="text" class="oneVisible" placeholder="for one" />
<input type="text" class="twoVisible" placeholder="for two" />
<input type="text" class="threeVisible" placeholder="for three" />

小提琴是here。这将向您展示如何使用不同的选择显示不同的输入。在服务器端,所有输入仍然存在,因此您必须根据所选选项选择使用哪个。

答案 2 :(得分:0)

以下内容将完全符合您的要求(根据我的理解)。

现有代码中没有额外的css或html。

/* CHOOSE EITHER WAY */

// jQuery way
$('[name=category]').on('change', function(e){
    var target = $(e.target),
        input = $('#file');
    if (target.val() === 'vid')
        input.attr('type', 'text');
    else
        input.attr('type', 'file');
});


// Javascript way
document.getElementsByName('category')[0].addEventListener('change', function(e){
    var target = e.target,
        input = document.getElementById('file');
    if (target.value === 'vid')
        input.setAttribute('type', 'text');
    else
        input.setAttribute('type', 'file');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="" method="POST" enctype="multipart/form-data" class="uploadForm">
    <div>
    	<select name="category" id="category">
    		<option value="pho" selected>Images</option>
    		<option value="vid">Video</option>
    		<option value="pap">Paper</option>
    	</select>
    	<input type="file" name="files[]" multiple id="file"/>
    	<p>Title: <input type="text" name="f-title" id="f-title" cols="40" rows="5" class="fullWidth"/>
    	</p>
    	<p>Description:</p>
    	<textarea type="text" name="f-desc" id="f-desc" cols="40" rows="5" class="fullWidth"></textarea>
    	<p>
    	    <label class="radio">Portfolio</label>
    	    <input type="radio" name="folio" value="TRUE" checked/> <span class="radio">Yes</span>
    			<input type="radio" name="folio" value="FALSE"/> <span class="radio">No</span>
    	</p>
    
       <input type="submit" value="Upload" id="submit"/>
    </div>
</form>