无法使用type =“text / javascript”调用JQuery事件

时间:2011-07-08 01:14:24

标签: jquery ruby-on-rails

出于某种原因,以下代码将起作用:

以下代码不起作用:

<script type='text/javascript'>
  $('#login_password').click(function() {
    alert('Handler for .click() called.');
  });
</script>

但是当我没有像这样指定脚本类型时它会这样做:

<script>
  ...
</script>

为什么我需要将未指定的脚本类型留给元素上的事件调用?

更奇怪的是,以下内容将起作用:

<script type='text/javascript'>
  $(document).ready(function(){
    $("#login_username").focus();
  });
</script>

我在Rails 3.0.9上使用JQuery 1.6.1。 gem jquery-rails 1.0.12已安装并捆绑。

在我的application.html.erb中,我打电话给:

<%= javascript_include_tag 'application.js', 'jquery.min.js', 'jquery.rails.js' %>

其中jquery.rails.js是不显眼的脚本编写适配器https://github.com/rails/jquery-ujs

提前致谢!

3 个答案:

答案 0 :(得分:1)

尝试用$(document).ready

包装你的第一个例子
<script type='text/javascript'>
$(document).ready(function(){
  $('#login_password').click(function() {
    alert('Handler for .click() called.');
  });
});
</script>

答案 1 :(得分:1)

见凯文的评论,他是对的。在没有指定type属性的情况下工作的事实只是计算运气或某些特定于浏览器的侥幸。

答案 2 :(得分:0)

听起来你在DOM准备好之前尝试在DOM上执行脚本,这就解释了为什么第三个代码片段工作正常。

如果你的脚本在你正在使用的元素之前加载(例如包括<head>标签中的脚本),请务必将它们包装起来:

$(document).ready(function() {
    // manipulate DOM here
});

// or

jQuery(function($) {
    // manipulate DOM here
});