我想根据所选类别从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很好!
答案 0 :(得分:2)
(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;
最好的方法是根据选择的类别显示适当的元素
答案 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>