一种优雅且灵活的方法:http: //jsfiddle.net/AyCFt/13/
jsFiddle 只是解决了提出的问题(显示警报)。下面的代码显示代码更加灵活,但如果不需要其他答案的 if/switch 语句,则避免它们。
HTML:我在 select 元素中添加了一个 id 和名为 data-alert 的自定义属性,其中包含每个选项的消息,这些选项需要在被选中时显示警报。这些属性在 HTML5 和更高版本中有效,但在早期的 HTML 版本中也可以正常工作:
<select id="selectAlert">
<option selected="selected">Please select your Login</option>
<option>--------------------------</option>
<option id="#projectmanager" data-alert="Hello">Project Manager</option>
<option id="#projectmanager2" data-alert="Hello to you too">Project Manager 2</option>ello
</select>
Javascript(版本 1):如果您只想要警报并且喜欢简洁明了的代码:
$(function() {
$("#selectAlert").change(function(){
var alertMsg = $(this).find(":selected").attr("data-alert");
if(alertMsg) alert(alertMsg);
});
});
请注意,此解决方案不会强制您显示文本或选项的值。您可以根据需要自由选择任何警报消息。
为什么会这样? 这种解决方案将逻辑与数据分离。因此,如果您正在生成select
使用服务器端代码(作为动态生成页面的一部分或通过 AJAX),如果可以避免,理想情况下您不希望以相同的方式生成 Javascript。尽管您的代码和其他一些解决方案中的代码将警报消息放在 Javascript 代码中,但此解决方案将它们放在option
HTML 中的 each 中。
Javascript(版本 2):如果您需要做更多的事情:
$(document).ready(function() {
$("#selectAlert").change(function(){
var $selected = $(this).find(":selected"); //faster than $("#selectAlert :selected") as it only searches among the options in the select and not the whole DOM like another answer's solution
//some code: you can do what you want with $selected here get it's value, its id, etc etc
var alertMsg = $selected.attr("data-alert")
if(alertMsg) alert(alertMsg);
//some more code here
});
});
问题中发布的代码问题:
您发布的代码的问题是您click
在选择元素的选项上使用。正如您所发现的,此事件没有为各个选项定义。
关于 UI 事件的一般要点:一般来说,最好尽可能尝试使用与设备无关的、更“语义”的事件。在这种情况下,我们使用的事件是告诉我们选择的值已更改的事件。用户是使用鼠标、键盘还是触摸都没有关系!!!