jquery addClass странная проблема - PullRequest
1 голос
/ 26 февраля 2011

мой код здесь http://jsfiddle.net/GKZRU/14/ все js работают должным образом, и добавьте / удалите классы css (это проверяется в консоли chrome js), но неактивный стиль не применяется, :( Я хочу серый фон в поле radiobutton, которое не выбрано.

Ответы [ 3 ]

4 голосов
/ 26 февраля 2011

Это потому, что вы поместили свой код в обработчик «DOM ready» через элемент управления jsFiddle левой панели. Функции не являются глобальными.

Попробуйте изменить определения функций. Вместо

function surpClassAdd() {

попробуй

window['surpClassAdd'] = function() {

Теперь, очевидно, в реальном коде вам не нужно этого делать. Еще одна (лучшая) идея - отказаться от использования атрибутов «onchange», чтобы связать обработчики событий, и работать с jQuery (так как вы все равно используете библиотеку). Свяжите обработчики с элементами вашего «готового» обработчика, и функции не обязательно должны быть глобальными (что в любом случае является грязным и неприглядным).

2 голосов
/ 26 февраля 2011

Ваш код имеет несколько проблем.

1. Поскольку вы выбрали onDomReady на боковой панели, определенные вами функции не являются глобальными.Вместо этого используйте no wrap (head).

Примечание : вам не нужно объявлять эти функции глобально, если вы используете метод jQuery .bind() (см. # 5).

2. Вам не нужны <style> и </style> на панели CSS.

3. Вы добавляете класс по переключателю,это не имеет никакого эффекта.Вы должны сделать что-то вроде этого:

HTML

<input type='radio' id='foo' name='mybtns' /> <label for='foo'>Label</label>

JavaScript

$('label[for=foo]').addClass('active').removeClass('inactive');

Или в этом случае сделать это на элементах <td>.


4. Это проблема стилей, но вы должны использовать абзацы (<p>text</p>) вместо простых текстовых узлов (text) и разрывы строк после каждой строки.

5. Если вы не используете встроенные обработчики событий и встроенные стили, вместо этого вы пишете код CSS и JS в отдельных файлах и ссылаетесь на них следующим образом:

<link rel='stylesheet' href='http://example.com/css/default.css' />
<script src='http://mysite.com/js/default.js'></script>

Поскольку вы уже используете jQuery, избежать встроенных обработчиков событий просто: вы можете использовать функцию jQuery .bind(), она будет работать во всех браузерах.

$('#el').bind('click', function() {
    // your event handler goes here
});

Некоторые обработчики событий (например, * 1049)*, keyup, change) имеют сокращения:

$('#el').click(function() {
    // your event handler goes here
});

6. Стоит ли использовать таблицы для разметки? Нет. В этом случае лучше использовать формы.

7. Вместо записи .addClass('active').removeClass('inactive') в двух функциях вы можете использовать .toggleClass('active inactive') [документы] и тогда у вас есть одна функция вместо двух.

1 голос
/ 26 февраля 2011

Вы также можете заставить его работать в jsFiddle, просто связав свои функции в javascript, а не в HTML. Вот быстрый пример, также немного очищенный для устранения дублирования: http://jsfiddle.net/GDPvU/1/

Несколько заметок:

  • Цвет фона был перемещен в родительский элемент (вместо ввода)
  • Вам не нужно использовать <style> теги на CSS-панели jsFiddle
...