jQuery在JSFiddle中工作,但在本地RoR中不起作用。类型错误?

时间:2013-12-20 05:04:18

标签: javascript jquery html css ruby-on-rails

以下是我在“_form.html.erb”中的代码:

<head>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>

    <script language='JavaScript'>
      checked = false;
      function checkedAll () {
        if (checked == false){checked = true}else{checked = false}
        for (var i = 0; i < document.getElementById('myform').elements.length; i++) {
      document.getElementById('myform').elements[i].checked = checked;
      }
      }
    </script>

    <script language='JavaScript'>
    function checkAnimal() {
    var values = ['1', '2', '4', '5'];
    $("#list").find('[value=' + values.join('], [value=') + ']').prop("checked", true);

    }
    </script>

    </head>

    <body>

    <form id="myform">
    Foo1<input type="checkbox" name="foo1"/>
    Bar2<input type="checkbox" name="bar2"/>
    Rah3<input type="checkbox" name="rah3"/>
    Check all: <input type='checkbox' name='checkall' onclick='checkedAll()'>
    </form>

    <form id='list'><br>
    1<input type='checkbox' value='1' />
    2<input type='checkbox' value='2' />
    3<input type='checkbox' value='3' />
    4<input type='checkbox' value='4' />
    5<input type='checkbox' value='5' />
    CheckAnimal<input type='checkbox' ID="checkAnimalCheckbox" name='checkanimal' onclick='checkAnimal()'><br>
    </form>

   </body>

Firebug在我的函数“checkAnimal()”上显示TypeError。它说“TypeError:$(...)。find不是函数

...(“#list”)。find('[value ='+ values.join('],[value =')+']')。prop(“checked”,true ...“

以下是我的“checkAnimal()”函数代码:(请注意,代码在JSFiddle中完美运行:http://jsfiddle.net/dUHx3/

<script language='JavaScript'>
function checkAnimal() {
var values = ['1', '2', '4', '5'];
$("#list").find('[value=' + values.join('], [value=') + ']').prop("checked", true);

}
</script>

非常感谢您的投入!

2 个答案:

答案 0 :(得分:1)

更改您的代码

:此

$("#list").find....

jQuery("#list").find...

原因

  

默认情况下,Rails包含Prototype javascript库和效果库Scriptaculous。

默认情况下,jQuery使用$作为jQuery的快捷方式。因此,如果您正在使用另一个使用$ variable的JavaScript库,则可能会遇到与jQuery的冲突。为了避免这些冲突,您需要在将jQuery加载到页面之后以及尝试在页面中使用jQuery之前立即将jQuery置于无冲突模式。

参考

http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/

答案 1 :(得分:0)

如果您真的想使用$作为jQuery的别名,还有另一种选择,因为它使代码简洁,并且还希望避免与使用$的其他库冲突。

<script>

 jQuery.noConflict(); // 

 jQuery( document ).ready(function( $ ) {
   // You can use the locally-scoped $ in here as an alias to jQuery.
   $( "div" ).hide(); // $ here will refer to jQuery.
 });


 window.onload = function(){
 var mainDiv = $( "main" ); // here $ will refer to whatever it is in the other library.
 }

</script>

进一步澄清Check this