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

时间:2017-02-02 09:54:50

标签: jquery asp.net-mvc knockout.js hyperlink

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

<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

但是,当我们右键单击并在新的选项卡中打开它时,它可以很好地工作。

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

1 个答案:

答案 0 :(得分:2)

您遇到此问题是因为您在代码中定义了两个冲突行为。 data-toggle="tab"属性使Bootstrap的Tab插件将其视为制表符触发器,也就是说,无论何时单击该项,都应使相关的制表符内容可见。另一方面,href属性只会为您提供常规网址。

现在想一想:

  • Bootstrap的选项卡需要在href属性中有一个有效的 jQuery选择器来确定它应该显示的HTML片段,
  • 但是有一个网址而不是选择器。

所以:

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

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

  • 您是否希望导航发生,而data-toggle="tab"只是一个偶然的遗留物?好的,只需删除它将起作用的属性。
  • 或者您想使用Bootstrap的标签功能吗?然后提供有效的选择器而不是网址。

我的猜测是第二个选项是你的目标,如果我没有弄错,href就在那里,因为你想将它用作Ajax请求的URL,并加载标签的内容 - 需求。如果这是正确的,href属性将无法帮助您,您应该将click事件绑定到执行初始化的viewmodel的方法(即,使用来自服务器的数据填充自身)。然后,您可以按照here, the code block just above 'Note 3'所述的方式传递ajax请求的url。