Uncaught Error: синтаксическая ошибка, нераспознанное выражение. Экранирование символов?

Я пытаюсь показать элемент div с идентификатором «онлайн-платежи», если в процессе оформления заказа выбран определенный переключатель.

Пока у меня есть следующее:

<div id="online-payments" style="display: none;">
    Test
</div>

И для javascript:

jQuery(document).ready(function(){
jQuery("radio[@name='payment\[method\]']").click(function(){
if (jQuery("radio[@name='payment\[method\]']:checked").val() == 'checkmo')
jQuery("#online-payments").show();
});
});

Это магазин Magento, поэтому я использую режим отсутствия конфликтов из-за библиотек прототипов.

Проблема сводится к названию радио. Это оплата[метод] по умолчанию в Magento (я пытался изменить его, но похоже, что это даст мне больше работы, чем я ожидал).

Так что это действительно сводится к экранированию этих скобок [ ], что, как я думал, я сделал, но даже тогда это выдает мне эту ошибку:

Uncaught Error: Syntax error, unrecognized expression: radio[@name='payment[method]'] 

Что здесь не так?


person pedropeixoto    schedule 16.07.2013    source источник


Ответы (1)


Там несколько проблем:

  1. Вы используете селектор атрибутов, но с недопустимым именем (@name). Имена атрибутов не могут начинаться с @.

  2. Также нет необходимости в обратной косой черте, если вы используете кавычки (что вы, одиночное кавычки в порядке). (И те, которые у вас есть, не становятся частью селектора, чтобы поставить обратную косую черту в селекторе, когда селектор находится в строке JavaScript, вам нужно экранировать обратную косую черту как \\.)

  3. radio не является именем тега.

Возможно, вы хотели:

jQuery("input[type=radio][name='payment[method]']")

jQuery предлагает расширение :radio, но использовать его не рекомендуется по причинам, обсуждаемым на его странице API. (по сути, jQuery не может передать это родным querySelector / querySelectorAll браузера).

person T.J. Crowder    schedule 16.07.2013