jQuery: value.attr is not a function
I have this snipped in my page:
And when it is executed, I get:
What am I doing wrong here? I am trying to get the value of the div.cat_id element.
4 Answers 4
Contents of that jQuery object are plain DOM elements, which doesn’t respond to jQuery methods (e.g. .attr ). You need to wrap the value by $() to turn it into a jQuery object to use it.
or just use the DOM method directly
You are dealing with the raw DOM element .. need to wrap it in a jquery object
The second parameter of the callback function passed to each() will contain the actual DOM element and not a jQuery wrapper object. You can call the getAttribute() method of the element:
Or wrap the element in a jQuery object yourself:
Or simply use $(this) :
You can also use jQuery(‘.class-name’).attr(«href») , in my case it works better.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.10.18.40487
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Источник
Не работает .attr()
Использую метод .attr, чтобы передать атрибут data-y элементу .inner. Блоков .content на странице множество, поэтому обращаюсь не напрямую по имени класса.
Атрибут не передается. $element определяет правильно. В консоли ошибок нет.
Подозреваю, что неправильно определяю элемент, но ошибку найти не могу.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
не работает метод attr в jquery 2.0.3
Здравствуйте! Есть вот такая страница и код на jQuery: .
не работает функцией $(this).attr(‘defaultValue’)
не могу понять почему не работает нужна помощь index.php 1
Мало того что вы не в ту ветку написали, вы еще и разметку не выложили.
С жорой сюда:
https://www.cyberforum.ru/javascript-jquery/
Добрый день. У меня идёт такая ссылка. http://NHG Polyclinic/index.php?msg=0 Мне нужно получить.
jQuery().attr
Доброе утро. Пытаюсь средствами jQuery изменить стиль элемента. $(«#leftDark»).attr(< style.
Подскажите по работе с attr
Саму работу $(this).attr() я вроде бы понимаю. Мне вот интересно можно ли как то массивом.
Value1 Как пoлучить значение attr(«attr»).
Источник
$(. ).attr(‘checked’, ‘checked’) не работает?
Заметил странный баг с чекбоксами в jQuery (а может, и в самом Chrome?) Даже не знаю, как толком описать этот баг, поэтому вот: jsfiddle.net/abZLf. Группа first срабатывает только один раз, после чего выделять чекбоксы отказывается (но снимать — снимает). В группе second, написанной не в стиле jQuery, все работает нормально.
Проверялось на Chrome 24 и Firefox 18 (ОС — Kubuntu 12.10).
Собственно, вопрос: почему это так?
- Вопрос задан более трёх лет назад
- 57319 просмотров
Не уверен, что это баг.
Вы неправильно используете Jquery и Javascript. Функция attr ( api.jquery.com/attr/ ) предназначена для изменения HTML-аттрибута элемента, а не изменения состояния чекбокса. Если вы хотите снять/установить галочку, есть определенный в стандарте DOM способ ( www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-30233917 ):
> checked of type boolean
> When the type attribute of the element has the value «radio» or «checkbox», this represents the current state of the form control, in an interactive user agent. Changes to this attribute change the state of the form control, but do not change the value of the HTML checked attribute of the INPUT element.
Поскольку других способов поменять сосотояние чекбокса в спецификациях HTML и DOM не указано, это значит, что единственный официальный способ — использовать свойство checked у DOM-объекта…
Очевидно, что некоторые браузеры переносят манипуляции с аттрибутами на чекбокс. Но это очень хлипкий и ненадежный способ и не всегда работает. Видимо, делая remoevAttr, вы что-то ломаете. Чтобы проверить, установлена ли галочка, пишите:
Чтобы установить состояние чекбокса, пишите:
Также могу дать совет, не читайте перед обедом советск^W статей с Хабра вроде «jQuery для чайников», написанных школьниками, а читайте официальную документацию или хотя бы книги от нормальных авторов, разбирающихся в предмете. Конечно, спецификация не ответит вам на любой вопрос, но она хотя бы даст отправную точку для поиска ответа.
Источник
Установка атрибута» type » ввода не работает с методом jQuery attr()
Я просмотрел предыдущие вопросы, но они, похоже, не ответили на то, что со мной происходит.
В моем реальном коде я создаю форму на лету и добавляю к ней две кнопки, одну для отправки, а другую для другой функции. Для этого я устанавливаю атрибут «type» кнопок для «submit» для одного и «button» для другого. Проблема в том, что в Chrome обе кнопки отправляют форму.
Я сделал более простой тест с этим HTML-кодом:
когда Chrome не находит кнопку отправки, любая кнопка отправляет форму.
следующее не работает, форма отправляется при нажатии кнопки:
работает следующее, форма не отправляется при нажатии кнопки:
форма и кнопка генерируются динамически, и я использую jQuery, поэтому attr() является наиболее очевидным метод. Что-то не так с jQuery core и спецификацией JS Chrome? Он отлично работает в Firefox. Большое спасибо.
5 ответов
во-первых, правильный подход:
Чтобы сделать то, что вы хотите в этом случае, перейдите к решению vanilla JavaScript,но проверьте его в IE!
почему:
Причина type не работает, потому что он терпит неудачу в IE (вы не можете chagne type ввода после его добавления в DOM, и он обрабатывается таким же образом), поэтому jQuery выдает ошибку при попытке. Он делает это специально для и элементов, когда изменение type атрибут.
если вы посмотрите в консоли вы увидите это:
ошибка: свойство типа Uncaught не может быть изменено
вот быстрый тест, показывающий этот, проверьте консоль, чтобы увидеть ошибку jQuery.
использовать опора вместо attr. Это точно сработает.
пожалуйста, посмотрите на следующий пример кода:
Дайте мне знать ваши мысли по этому поводу.
jQuery отлично работает для меня в Chrome . все функции, которые я бросил на него сегодня, работают нормально, в том числе .буква attr().
Я не на 100% уверен, что вы спрашиваете, но я думаю, что вы спрашиваете о предотвращении отправки формы с помощью кнопки в Chrome. Если это так, почему бы не использовать preventDefault ?
EDIT:
Я согласен с Ником, что для того, чтобы сделать то, что вы пытаетесь сделать, идите с прямым подходом JavaScript. Но в этом случае вы применяете атрибуты к кнопке, которые не имеют смысла (или, по крайней мере, недействительны). Поскольку вы уже используете jQuery, почему не обработать его должным образом и предотвратить действие по умолчанию при нажатии кнопки в форме?
таким образом, этот пост был полезен для меня, но моим решением было клонировать рассматриваемую кнопку и заменить ее
Источник
JQuery.data() не работает, но .attr() делает
Прости меня за то, что я не был более конкретным. У меня такая странная ошибка. После загрузки doc я зацикливаю некоторые элементы, которые изначально имеют data-itemname=»» , и я устанавливаю эти значения с помощью .attr(«data-itemname», «someValue») .
Проблема. Когда я позже прохожу через эти элементы, если я делаю elem.data().itemname , я получаю «» , но если я делаю elem.attr(«data-itemname») , я получаю «someValue» . Это как jQuery .data() getter получает только элементы, которые изначально устанавливаются для некоторого значения, но если они изначально пусты и позже установлены, то .data() не получает значение позже.
Я пытался воссоздать эту ошибку, но не смог.
Edit
Кроме того, фрагменты из ссылки выше…
Я столкнулся с подобной “ошибкой” несколько дней назад при работе с .data() и .attr(‘data-name’) для атрибутов данных HTML5.
Поведение, которое вы описываете, не является ошибкой, но по дизайну.
Вызов .data() является особенным – он не только извлекает атрибуты данных HTML5, но и пытается оценить/проанализировать атрибуты. Таким образом, с атрибутом типа data-myjson=’<"hello":"world">‘ при извлечении через .data() возвращается Object , а поиск через .attr() вернет строку. См. пример jsfiddle.
Поскольку .data() выполняет дополнительную обработку jQuery сохраняет результаты оценки атрибутов в $.cache – в конце концов, как только атрибут данных был оценен, было бы расточительно переоценивать при каждом вызове .data() – тем более, что данные переменные могут содержать сложные строки JSON.
Я сказал все, чтобы сказать следующее: После получения атрибута через .data() любые изменения, сделанные .attr(‘data-myvar’, ») , не будут видны последующими вызовами .data() . Проверьте это на jsfiddle.
Чтобы избежать этой проблемы, не смешивайте вызовы .data и .attr() . Используйте один или другой.
Это потому, что имя атрибута data-itemname . Вы не можете использовать — в сокращенном обозначении obj.attribute (obj.data-itemname будет intepreted как “obj.data минус itemname” ).
Почему бы вам просто не использовать .data() везде?
Вы также можете объявить значения по умолчанию inline в HTML, что тоже хорошо.
если вы хотите изменить его, просто выполните
и вообще удалить его, вы можете вызвать
вы действительно должны стараться избегать использования .attr(«data-*») , я не знаю, почему вы все равно хотите сделать это.
Это результат недоразумения: data НЕ является аксессуаром для атрибутов data-* , Это и больше, и меньше.
data является аксессуаром для кеша данных jQuery для элемента. Этот кеш инициализируется из атрибутов data-* , если они есть, но data никогда не записывает в атрибуты, а также не меняет атрибут изменения кэша данных после инициализации.
data также массирует то, что он находит различными способами, угадывая типы данных, делая data(«foo») для элемента с data-foo=»1″ числом, а не строкой, или даже разбирать вещи как JSON, если они выглядят правильно:/p >
Если вы хотите использовать атрибуты (как чтение, так и их настройку), используйте attr , а не data . attr является аксессуаром для атрибутов.
.attr(«data-itemname», «someValue») изменяет DOM.
.data(«itemname», «someValue») изменяет кэш jQuery.
Чтобы это работало в следующем Javascript и, кроме того, в CSS, вы должны установить оба.
Вы должны установить данные с помощью .data(‘itemname’, ‘someValue’); . Использование .attr() для установки атрибутов данных не будет работать: http://jsfiddle.net/ThiefMaster/YHsKx/
Однако вы можете предоставить встроенные значения, используя, например,
Я вижу, что это привело к некоторому разделению того, как подходить к настройке атрибута данных.
Я тоже столкнулся с этой проблемой и обнаружил, что проблема заключается в простом форматировании имени атрибута данных.
По моему опыту, вам следует избегать использования дефисов в переменной данных (имя переменной, которое следует после “data-“).
Это не сработало для меня:
Но следующее работало просто отлично! 🙂
(При необходимости я использую подчеркивание вместо дефиса)
Я надеюсь, что это помогает. Приветствую всех!
Источник