当我使用jQuery来处理下拉列表中的更改触发器时,我遇到了一个问题.
我使用2段代码:
//---------- Case 1
$(document).on("change", "#drop-down-id", function () {
alert(this.value);
});
//----------Case 2
$("#drop-down-id").change(function () {
alert(this.value);
});
Run Code Online (Sandbox Code Playgroud)
第一个运行顺利,但第二个没有在我启动浏览器时触发,但在我刷新我的网站后,它可以工作.
你有什么主意吗?
我的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>
Run Code Online (Sandbox Code Playgroud)
我使用过Rails 4.1和arr是一个包含数字的数组.
- 编辑:我发现问题来自Rails的Asset Pipeline,而不是jQuery.
我把JS代码放在一个脚本标签中,它在两种情况下都有效,但当我把它放在assets文件夹中时,就会出现问题.
感谢您的快速回复!
我是 Web 开发的新手,我正在学习 JavaScript。
来自斯坦福大学的课程:
JavaScript 是一种解释型语言,而不是一种编译型语言。像 C++ 或 Java 这样的程序在运行之前需要进行编译。源代码通过称为编译器的程序传递,编译器将其转换为机器理解并可以执行的字节码。相比之下,JavaScript 没有编译步骤。相反,浏览器中的解释器会读取 JavaScript 代码,解释每一行,然后运行它。更现代的浏览器使用一种称为即时 (JIT) 编译的技术,该技术在 JavaScript 即将运行时将其编译为可执行的字节码。
从你不知道的 JS: Scope & Closures by Kyle Simpson :
...但尽管 JavaScript 属于“动态”或“解释”语言的一般类别,但它实际上是一种编译语言。
我们只是说,为了简单起见,任何 JavaScript 片段都必须在执行之前(通常是在执行之前!)编译。所以,JS 编译器会取程序 var a = 2; 并首先编译它,然后准备好执行它,通常是立即执行。
从 Stack Overflow 上的一些问题来看,有一些想法,例如:这取决于语言的实际实现。
你有什么想法?