【发布时间】:2014-10-28 02:22:33
【问题描述】:
当我使用 jQuery 处理下拉菜单上的更改触发器时遇到问题。
我用了两段代码:
//---------- Case 1
$(document).on("change", "#drop-down-id", function () {
alert(this.value);
});
//----------Case 2
$("#drop-down-id").change(function () {
alert(this.value);
});
第一个运行顺利,但是第二个在我启动浏览器时没有触发,但是我刷新我的网站后,它就可以了。
你有什么想法吗?
我的 jQuery 版本:1.11.1,我已经在 Chrome 38、Firefox 32 和 IE 11 上进行了测试。
-- 编辑: @JanR & Cheery:好像是这样的:
<select id="drop-down-id">
<% arr.each do |option| %>
<option value="<%= option %>"><%= option %></option>
<% end %>
</select>
我用过 Rails 4.1,arr 是一个包含数字的数组。
-- 编辑: 我发现问题来自 Rails 的 Asset Pipeline,而不是 jQuery。
我将 JS 代码放在脚本标签中,这两种情况都有效,但是当我把它放在 assets 文件夹中时,问题就发生了。
感谢您的快速回复!
【问题讨论】:
-
你能在 jsfiddle.net 上重建问题吗?此选择是否动态创建?
-
case 1 可以用于元素,即使您的元素在 html 中仍然不存在。 case 2 应该在 dom ready 函数内部使用,这样才能加载 html 中的所有元素。
-
@haitran
yes the select created dynamically.这可能意味着在监听器分配的那一刻它不存在。通过刷新浏览器从缓存中读取并几乎立即选择其位置。当元素已经存在时,您应该调用.change(。 -
以后,对于 HTML/JavaScript 相关的问题,你的服务器端语言无关紧要。您想向人们展示浏览器看到的相同代码,即服务器生成的 HTML。然而,仅仅一个
<select>的小片段并不能帮助解决复杂的交互问题。您通常需要使用最少的代码(HTML、JavaScript 和 CSS)创建一个精简的测试用例来重现您的问题。花时间创建这个测试用例会教你一些东西,通常会告诉你问题,如果没有,它会为帮助者提供坚实的基础。 -
P.S.在 HTML 中,如果您希望选项的值与其显示的值相同,则不需要
value="…"属性。
标签: javascript jquery ruby-on-rails