【问题标题】:Javascript: Setting Default Variable in Drop down menuJavascript:在下拉菜单中设置默认变量
【发布时间】:2018-05-09 00:25:55
【问题描述】:

2 个问题,我有一个列出 3 个位置的表格。提交表单后,我希望变量“event_location”等于在下拉菜单中选择的任何位置。我唯一不明白的是,如果用户根本没有选择位置,即用户只使用默认位置(显示的第一个位置)怎么办。我不认为我的 javascript 代码说明了这一点。下面我已经包含了 html 和 javascript。

<select name="location" id="event_location" onchange='getSelectedValue();'>
<option value="sandiego">San Diego</option>
<option value="losangeles">Los Angeles</option>
<option value="sanfrancisco">San Francisco</option>
</select>

function getSelectedValue() {

var event_location = document.getElementById('event_location').value;


}

函数 getSelectedValue() 仅在触发 'onchange' 事件时发生。因此,如果他们对 San Diego 作为他们的第一选择感到满意,他们将不会触发 onchange 事件。我应该只在函数之外声明 event_location = 'sandiego' 吗?

另一个棘手的部分是基于他们选择的 event_location(圣地亚哥、洛杉矶或旧金山),我的 javascript 会更改他们被定向到的 URL。如何更改 URL 以说明他们选择的 event_location。例如,如果他们选择了圣地亚哥,一旦他们点击搜索按钮,就会将他们带到:http://myurl.com/sandiego。这是迄今为止我的第二个函数的 html 和 javascript:

<input type='button' value='Search' onclick='eventViewer();' />

function eventViewer() {
   function getSelectedValue() {
       var event_location = document.getElementById('event_location').value;
       }

   if (event_location = 'losangeles') {
      window.open( 'http://...' )
      }
   else if (event_location = 'sanfrancisco') {
      window.open( 'http://...' )
      }
   else {
      window.open( 'http://...' ) //link to san diego
      }
   }

您可以使用标准从下拉框中获取值,而不是创建 2 个单独的函数

var event_location = document.getElementById('event_location').value;

这将获取下拉菜单中的任何值。因此,您不必担心具有 2 个不同函数的变量范围,您可以在 1 个“OnClick”事件中声明所有变量。

【问题讨论】:

  • 你为什么不添加一个虚拟选项 None 作为第一个选项,所以当用户没有选择任何东西时,他不会去任何地方?
  • 那么像一个空白字段?可用性方面,您认为这是最佳选择吗?
  • 为什么你认为你需要一个嵌套函数?
  • 是的,这是一种常见的做法,您可以确定用户已经查看了选项并选择了一个。否则,无法决定用户是忘记选择选项还是因为他想选择默认值而没有做任何事情
  • 考虑到范围,如果我将它们作为 2 个单独的函数,则该变量将仅适用于该函数。我对javascript很陌生=/

标签: javascript drop-down-menu


【解决方案1】:

在回答您问题的第一部分时,您可以更改为使用附加到表单元素的 onsubmit,而不是使用附加到 select 元素的 onchange,这样,无论变量是否具有,都将被填充已更改:

<form action='/process_form' onsubmit="getSelectedValue();">
...
</form>

您能否将问题的第二部分澄清为一个实际问题 - 我不确定您目前在问什么。

编辑:

两件事可能会使您的问题的第二部分更容易:

  1. 如果没有其他依赖项,则将下拉列表中每个选择项的“值”设置为您要发送此人的 URL。这样您就可以简单地从选择值中读取 URL 并将它们直接发送到那里,而无需使用 case 语句进行翻译。

  2. 尝试使用 switch 语句而不是级联 if/else,这样更易​​于阅读和调试。您还可以通过将操作(即 window.open)移动到 switch 语句的底部并仅使用每个 switch 设置变量来减少代码量并提高其清晰度:

例如

switch(event_location)
{
  case "san_francisco":
     var url = 'http://sanfrancisco.com'
     break;
  case "san_diego":
     url = 'http://sandiego.com'
     break;
  default:
     alert('please choose a city')
}
url ? window.open(url) : null;

【讨论】:

  • 对不起,我希望我的更改能澄清它。存在依赖关系,因为我有一个通过单击搜索触发的功能,以及一个通过选择 event_location 触发的功能。我将研究使用 switch 语句。我认为连接这两个函数的最大问题在于变量范围。感谢您的耐心和回复!我真的很感激
  • 我想我知道你要去哪里,但还不是很清楚。您已经多次提到范围问题,但我不确定它们是什么。您显示的代码应该正确解释所有内容。如果看起来代码不起作用,您可能会考虑 UI 是否实际上需要两个下拉菜单,但很难确定是否脱离上下文。
  • 我应该提到位置之前有一个“输入优惠券号码”字段,这可能会让它更清楚一点。我会继续破解它,看看我是否遇到任何问题。我几乎明白了:),谢谢你的帮助
【解决方案2】:
function eventViewer() 
    var event_location = document.getElementById('event_location').value;      

    if (event_location = 'losangeles') {
        window.open( 'http://...' )
    } else if (event_location = 'sanfrancisco') {
        window.open( 'http://...' )
    } else {
        window.open( 'http://...' ) //link to san diego
    }
}

通常您会使用服务器端代码(php、asp.net、java、...)来存储用户选择,但如果这不是一个选项,只需通过 javascript 将其保存在 cookie 中。

【讨论】:

  • 感谢您的建议,我对 javascript 非常陌生,只研究了一天,我想我的方法在标准方面确实有点 hackish 哈哈
猜你喜欢
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多