jQuery работает в JSFiddle, но не в локальном RoR. TypeError? [Дубликат]

0

Ниже приведен мой код в "_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 показывает TypeError на моей функции "checkAnimal()". Он говорит: "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>

Ваш вклад очень ценится!

  • 0
    Вы используете другую библиотеку JavaScript, которая использует $ ? Нравится MooTools?
  • 0
    Да! У меня есть другой JavaScript, который использует $. И, как предположил Раджеш, я изменил $ на jQuery, и теперь код работает как положено. Спасибо вам большое! Приму ответ, как только мне позволят.
Показать ещё 2 комментария

2 ответа

1
Лучший ответ

Измените свой код

это

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

в

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

причина

По умолчанию Rails поставляется с библиотекой JavaScript Prototype и библиотекой эффектов Scriptaculous.

По умолчанию jQuery использует $ как ярлык для jQuery. Таким образом, если вы используете другую библиотеку JavaScript, которая использует переменную $, вы можете столкнуться с конфликтами с jQuery. Чтобы избежать этих конфликтов, вам нужно поместить jQuery в режим без конфликтов сразу после его загрузки на страницу и прежде, чем вы попытаетесь использовать jQuery на своей странице.

СПРАВКА

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

  • 0
    Большое спасибо за предоставление ссылки. Я всегда буду помнить этот урок! Я провел последние три дня, копая этот сайт для решения, и, наконец, решил создать учетную запись, чтобы попросить о помощи. ОНО ТОГО СТОИТ! Еще раз спасибо, Раджеш!
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>

для дальнейшего уточнения Проверьте это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню