2015-02-06 56 views
0

當使用特殊字符如。或/在ID爲jQuery UI選擇菜單我點擊打開菜單中的一個選項時,會得到JS語法錯誤。 我知道,在jQuery中,我需要轉義特殊字符,但是這段代碼似乎深藏在lib本身內部。 不確定在報告錯誤之前我錯過了什麼,所以我想獲得提示!使用特殊字符和ID的jQuery UI選擇菜單

我使用jQueryUI的版本1.11.1使用jQuery 1.11.1但試圖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> 

錯誤信息(在Chrome瀏覽控制檯)從1.10開始其它版本是:

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

TIA

+0

可能重複[什麼是HTML中的id屬性的有效值?](http://stackoverflow.com/questions/70579/what-are-valid-values-for-the-id-attribute-in -html) – blgt 2015-02-06 14:39:00

+0

這不是真的重複:我意識到如果不使用這些特殊字符,可以避免這個問題!但在我的情況下,身份證是由框架生成的,我不能放棄這些字符! – Sheogorat 2015-02-06 15:14:23

回答

0

您可以使用name屬性或document.getElementById()來獲取您不能用作jQuery選擇器的ID:

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

如果錯誤是由庫本身產生的,這不會真的有很大幫助。然而,你可以嘗試用此代替無效字符的id作爲一種變通方法:

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

當然,適當的方式將沒有點和斜槓使用ID-S。這是一個相當sl way的工作方式,但它會起作用。 請謹慎使用!

+0

謝謝,bglt但這不是真正的問題。如果我需要jQuery選擇器,我確實通過 'function escId(id){ return id.replace(/(:|\.|\[|\]|\/)/g,「\\\\ $ 1「); }' 和這樣稱呼它 '$( '#' + escId( 'inp.begda/gs_req-begda')).' 該錯誤消息的上方從jQuery內的一些選擇ACCES產生UI庫!看來這個小部件在內部讀取並使用這個id,而沒有這種轉義邏輯。 – Sheogorat 2015-02-06 16:25:42

+0

我想,這就是爲什麼我包括第二行。它會用('.ui'庫不會抱怨的)替換(外部生成的)id – blgt 2015-02-06 16:42:23

+0

如果這不是一個選項,那麼你應該考慮你使用的庫不兼容,並尋找一個只使用其中一個或另一個,但不是 – blgt 2015-02-06 16:43:28