下拉表单 & Javascript
Dropdown Form & Javascript
几年来我一直在成功使用以下代码...基本上,它允许用户select下拉列表中的两个选项之一,并让他们可以选择单击任一按钮'A' 或 'B' 要么下载(link 对于两个选项是相同的),要么在线查看 selection(两个单独的 links)。
我现在需要在列表中添加第三个选项,但运气不好?这是添加了新选项 3 的原始代码,javascript 我一直保持原始代码,因为到目前为止我尝试过的方法不起作用。
<form>
<select class="target">
<option value="selected" selected="selected">Please choose...</option>
<option value="option1" value="option3">OPTION 1</option>
<option value="option2" value="option4">OPTION 2</option>
<option value="option5" value="option6">OPTION 3</option>
</select>
<button type="button" class="button" id='button1'>BUTTON 1</button>
<button type="button" class="button" id='button2'>BUTTON 2</button>
</form>
<script>
var onSubmit1 = function()
{
window.location = "http://www.link1.com/";
};
var onSubmit2 = function()
{
window.location = "http://www.link2.com/";
};
var onSubmit3 = function()
{
window.location = "https://www.link1.com/";
};
var onSubmit4 = function()
{
window.location = "https://www.link3.com/";;
};
$('.target').change(function(e) {
var dropdown = $('.target');
var text = $( ".target option:selected" ).text();
var $button1= $('#button1');
$button1.unbind('click');
if(text == "OPTION 1"){
$button1.click(onSubmit1);
return;
}
$button1.click(onSubmit2);
});
$('.target').change(function(e) {
var dropdown = $('.target');
var text = $( ".target option:selected" ).text();
var $button2= $('#button2');
$button2.unbind('click');
if(text == "OPTION 1"){
$button2.click(onSubmit3);
return;
}
$button2.click(onSubmit4);
});
</script>
有没有人有任何想法...上面的代码是否完全可行?
正如人们所提到的,您大量过度使用了这段代码并使其过于复杂。如果你这样尝试就很简单了:
<form id="myForm">
<select>
<option selected disabled>Please choose...</option>
<option value="http://www.link1.com">OPTION 1</option>
<option value="http://www.link2.com">OPTION 2</option>
<option value="http://www.link3.com">OPTION 3</option>
</select>
<button type="button" data-action="follow">GO TO URL</button>
<button type="button" data-action="download">DOWNLOAD</button>
</form>
请注意,我已将 data-action
添加到您的按钮中,因此我可以识别哪个按钮执行什么操作。我还将 select 的值更改为您希望它们代表的实际值,而不是您必须更改的占位符。
为了正确起见,我还'disabled'你的第一个选项,所以它不能被重新select编辑,我已经删除了它的值不应该有。我在表单元素中添加了一个 id
,因为它允许我在没有太多 类 的情况下完成所有操作,并且我删除了所有你的 类。我也省略了 ="selected"
,因为你不需要它(除非你使用 XSL
转换,这只是......模糊。)
$("#myForm button").click(function(event){
event.preventDefault();
var url = $("#myForm select").val() || false;
var action = $(this).data("action");
if(action === "follow" && url){
/* Follow the link */
window.location.href = url;
/* While testing, you could use alert instead of window.location.href
* as such:
* alert(action + " " + url)
*/
} else if(action === "download" && url){
/* Do the download thing, since I don't know how
you're doing that, heres a fictional one: */
window.location.href = "http://www.link.com/download.php?url=" + url;
/* While testing, you could use alert instead of window.location.href
* as such:
* alert(action + " " + url)
*/
}
});
现在我们需要做的就是查看您按下的是哪个按钮(将其绑定到所有按钮,然后读取 data-action
),然后执行您想执行的任何操作。请注意,我正在使用行 var url = $("#myForm select").val() || false;
到 select 一个值或分配它 false
- 这是为了防止您的 'default' 选项触发该功能(我稍后检查如果 url 在 if
语句中有值)。
几年来我一直在成功使用以下代码...基本上,它允许用户select下拉列表中的两个选项之一,并让他们可以选择单击任一按钮'A' 或 'B' 要么下载(link 对于两个选项是相同的),要么在线查看 selection(两个单独的 links)。
我现在需要在列表中添加第三个选项,但运气不好?这是添加了新选项 3 的原始代码,javascript 我一直保持原始代码,因为到目前为止我尝试过的方法不起作用。
<form>
<select class="target">
<option value="selected" selected="selected">Please choose...</option>
<option value="option1" value="option3">OPTION 1</option>
<option value="option2" value="option4">OPTION 2</option>
<option value="option5" value="option6">OPTION 3</option>
</select>
<button type="button" class="button" id='button1'>BUTTON 1</button>
<button type="button" class="button" id='button2'>BUTTON 2</button>
</form>
<script>
var onSubmit1 = function()
{
window.location = "http://www.link1.com/";
};
var onSubmit2 = function()
{
window.location = "http://www.link2.com/";
};
var onSubmit3 = function()
{
window.location = "https://www.link1.com/";
};
var onSubmit4 = function()
{
window.location = "https://www.link3.com/";;
};
$('.target').change(function(e) {
var dropdown = $('.target');
var text = $( ".target option:selected" ).text();
var $button1= $('#button1');
$button1.unbind('click');
if(text == "OPTION 1"){
$button1.click(onSubmit1);
return;
}
$button1.click(onSubmit2);
});
$('.target').change(function(e) {
var dropdown = $('.target');
var text = $( ".target option:selected" ).text();
var $button2= $('#button2');
$button2.unbind('click');
if(text == "OPTION 1"){
$button2.click(onSubmit3);
return;
}
$button2.click(onSubmit4);
});
</script>
有没有人有任何想法...上面的代码是否完全可行?
正如人们所提到的,您大量过度使用了这段代码并使其过于复杂。如果你这样尝试就很简单了:
<form id="myForm">
<select>
<option selected disabled>Please choose...</option>
<option value="http://www.link1.com">OPTION 1</option>
<option value="http://www.link2.com">OPTION 2</option>
<option value="http://www.link3.com">OPTION 3</option>
</select>
<button type="button" data-action="follow">GO TO URL</button>
<button type="button" data-action="download">DOWNLOAD</button>
</form>
请注意,我已将 data-action
添加到您的按钮中,因此我可以识别哪个按钮执行什么操作。我还将 select 的值更改为您希望它们代表的实际值,而不是您必须更改的占位符。
为了正确起见,我还'disabled'你的第一个选项,所以它不能被重新select编辑,我已经删除了它的值不应该有。我在表单元素中添加了一个 id
,因为它允许我在没有太多 类 的情况下完成所有操作,并且我删除了所有你的 类。我也省略了 ="selected"
,因为你不需要它(除非你使用 XSL
转换,这只是......模糊。)
$("#myForm button").click(function(event){
event.preventDefault();
var url = $("#myForm select").val() || false;
var action = $(this).data("action");
if(action === "follow" && url){
/* Follow the link */
window.location.href = url;
/* While testing, you could use alert instead of window.location.href
* as such:
* alert(action + " " + url)
*/
} else if(action === "download" && url){
/* Do the download thing, since I don't know how
you're doing that, heres a fictional one: */
window.location.href = "http://www.link.com/download.php?url=" + url;
/* While testing, you could use alert instead of window.location.href
* as such:
* alert(action + " " + url)
*/
}
});
现在我们需要做的就是查看您按下的是哪个按钮(将其绑定到所有按钮,然后读取 data-action
),然后执行您想执行的任何操作。请注意,我正在使用行 var url = $("#myForm select").val() || false;
到 select 一个值或分配它 false
- 这是为了防止您的 'default' 选项触发该功能(我稍后检查如果 url 在 if
语句中有值)。