超链接无法使用淘汰赛。给出错误:语法错误,无法识别的表达式

Posted

技术标签:

【中文标题】超链接无法使用淘汰赛。给出错误:语法错误,无法识别的表达式【英文标题】:Hyperlink not working using knockout. Gives error: Syntax error, unrecognized expression 【发布时间】:2017-06-19 08:02:13 【问题描述】:

要创建超链接,我使用以下代码。

<a data-toggle="tab" data-bind="attr:  href: '../Company/Index/' + IndexID , text: XYZ"></a>

代码的主要目的是从当前关卡向后移动一个关卡。

生成的html如下。

<a data-toggle="tab" data-bind="attr:  href: '../Company/Index/' + IndexID , text: DateTimeStamp" href="../Company/Index/0">XYZ</a>

当我们尝试点击超链接时,我们会收到错误消息

Uncaught Error: Syntax error, unrecognized expression: ../Company/Index/0
    at Function.Sizzle.error (jquery-1.9.0.js:4411)
    at tokenize (jquery-1.9.0.js:5057)
    at select (jquery-1.9.0.js:5439)
    at Function.Sizzle [as find] (jquery-1.9.0.js:3984)
    at init.find (jquery-1.9.0.js:5553)
    at init (jquery-1.9.0.js:179)
    at jQuery (jquery-1.9.0.js:53)
    at b.show (bootstrap.min.js:9)
    at HTMLAnchorElement.<anonymous> (bootstrap.min.js:9)
    at Function.each (jquery-1.9.0.js:631)
Sizzle.error @ jquery-1.9.0.js:4411
tokenize @ jquery-1.9.0.js:5057
select @ jquery-1.9.0.js:5439
Sizzle @ jquery-1.9.0.js:3984
find @ jquery-1.9.0.js:5553
init @ jquery-1.9.0.js:179
jQuery @ jquery-1.9.0.js:53
b.show @ bootstrap.min.js:9
(anonymous) @ bootstrap.min.js:9
each @ jquery-1.9.0.js:631
each @ jquery-1.9.0.js:253
a.fn.tab @ bootstrap.min.js:9
(anonymous) @ bootstrap.min.js:9
dispatch @ jquery-1.9.0.js:3045
elemData.handle @ jquery-1.9.0.js:2721

但是,当我们右键单击并在新标签页中打开它时,它可以完美运行。

任何有用的指针将不胜感激。

【问题讨论】:

你这样做的目的是什么?进行整页请求或显示引导选项卡?因为正如我所见,问题在于您正在混合 url(这就是在新选项卡中打开有效的原因)和引导选项卡插件(需要一个有效的选择器来决定显示哪个选项卡);此功能会拦截a 的默认行为,因此不会发生请求,但只要涉及引导程序,href 中的值就不是有效的选择器。因此,答案取决于您是想通过 http 请求实际导航,还是按应有的方式使用引导选项卡。 【参考方案1】:

您遇到此问题是因为您在代码中定义了两个冲突行为。 data-toggle="tab" 属性使 Bootstrap 的 Tab 插件将其视为选项卡触发器,即,无论何时单击该项目,都应使关联的选项卡内容可见。另一方面,href 属性仅在您的情况下提供常规 url。

现在想想:

Bootstrap 的选项卡需要一个有效的 href 属性中的 jQuery 选择器来确定它应该使哪个 HTML 片段可见, 但是有一个 url 而不是选择器。

所以:

右键单击元素并选择在新选项卡中打开有效,因为在这种情况下,导航不会被拦截,浏览器只是打开一个新选项卡并使其导航到选定的 url,而 Bootstrap 不是在这里玩。 仅仅单击它并停留在同一个选项卡中是行不通的,因为在这种情况下,导航被Bootstrap拦截,它提取href属性的值并尝试将其用作jQuery选择器使引用的元素可见。很明显,因为是url而不是选择器,所以会失败。

所以答案真的取决于你真正想要完成的事情。

您是否希望导航发生,而data-toggle="tab" 只是意外剩余?好吧,只要去掉这个属性就行了。 或者您想使用 Bootstrap 的选项卡功能吗?然后提供一个有效的选择器而不是一个 url。

我的猜测是第二个选项是您的目标,如果我没记错的话,href 存在是因为您想将其用作 Ajax 请求的 url,并按需加载选项卡的内容。如果这是正确的,href 属性对您没有帮助,您应该将 click 事件绑定到执行初始化的视图模型的方法(即使用来自服务器的数据填充自身)。然后你可以传递 ajax 请求的 url 来按照here, the code block just above 'Note 3' 的描述进行。

【讨论】:

哦。我的错。现在工作正常。谢谢你的解释。

以上是关于超链接无法使用淘汰赛。给出错误:语法错误,无法识别的表达式的主要内容,如果未能解决你的问题,请参考以下文章

Safari/Opera 的错误是不是有解决方法,您无法通过超链接进行选项卡?

Webpack 无法在我的 js 文件中识别我的 JSX 语法

ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法

无法使用视图名称 (django-rest-framework) 解析超链接关系的 URL

通过 Excel/Word 中的超链接打开的选项卡无法识别会话 cookie

模板默认语法无法识别