2015-02-06 3 views
0

при использовании специальных характеристик, таких как. или/в id для jQuery UI selectmenu. Я получаю синтаксические ошибки JS при нажатии на одну из опций в открытом меню. Я знаю, что в jQuery мне нужно было бы избежать специальных символов, но этот код кажется глубоко внутри самой библиотеки. Не уверен, что я что-то пропустил, прежде чем сообщить об ошибке, поэтому хотел бы получить подсказки!Использование специальных символов и идентификаторов jQuery UI selectmenu

Я использую jQueryUI версии 1.11.1 с JQuery 1.11.1, но попробовал другие варианты, начиная с 1.10 в this fiddle

<select name=".speed/" id=".speed/" class="sm"> 
    <option>Slower</option> 
    <option>Slow</option> 
    <option selected="selected">Medium</option> 
    <option>Fast</option> 
    <option>Faster</option> 
</select> 

сообщение об ошибке, (в хромированной консоли) является:

Uncaught Error: Syntax error, unrecognized expression: .ui-selectmenu-menu, #.speed/-button 
jquery-1.10.1.js:1924 

TIA

+0

Возможный дубликат [Какие допустимые значения для атрибута id в HTML?] (Http://stackoverflow.com/questions/70579/what-are-valid-values-for-the-id-attribute-in -html) – blgt

+0

Это не дубликат: я знаю, что эту проблему можно избежать, если эти специальные символы не используются! Но в моем случае идентификаторы генерируются каркасом, и я не могу отказаться от этих символов! – Sheogorat

ответ

0

Вы можете использовать атрибут name или document.getElementById(), чтобы получить идентификатор, который нельзя использовать в качестве селектора jQuery:

var elt = $(document.getElementById(".speed/")); 
var elt = $("[name='.speed/']"); 

Если ошибки порождены самой библиотекой, это не поможет. Однако вы можете попробовать заменить недопустимые символы в ИО с этим в качестве обходного пути:

elt.attr("id", elt.attr("id").replace(".", "dot").replace("/", "slash")); 
// ... possibly include other characters we don't like 

Правильный способ, конечно, будет использовать идентификатор-s без точек и косой черты. Это довольно неряшливый способ обойти его, но он будет работать. Следует использовать с осторожностью!

+0

спасибо, bglt, но это не проблема. Если мне нужны селекторы jQuery, я избегаю идентификатора с 'function escId (id) { return id.replace (/(:|\\|||||]|\\)/g," \\\\ $ 1 "); } ' и назвать его как это ' $ ('#' + escId ('inp.begda/gs_req-begda')) .' Сообщение об ошибке выше, получает из некоторых селекторного доступа внутри JQuery UI lib! Кажется, что виджет читает и использует идентификатор внутри без такой escape-логики. – Sheogorat

+0

Я понял, вот почему я включил вторую строчку. Он заменит (сгенерированный извне) id тем, что библиотека '. .ui' не будет жаловаться на – blgt

+0

. Если это не вариант, вам следует рассмотреть библиотеки, которые вы используете несовместимыми, и искать решение, которое использует только либо один, либо другой, но не оба: – blgt

 Смежные вопросы

  • Нет связанных вопросов^_^