如何使用Knockout的data-bind实现按钮链接在新标签页打开
解决Knockout绑定href时target="_blank"不生效的问题
我太懂你的烦恼了——既要靠Knockout的data-bind传递SN参数,又得让链接在新标签页打开,直接加target还报错。这里有几个靠谱的解决方案,你可以试试:
方案1:把target放进attr绑定对象里
你之前在data-bind里加target失效,大概率是写法不对。正确的做法是把target和href一起放在attr的对象配置中,Knockout会同时渲染这两个属性:
<a data-bind="attr: { href: '@Url.Action(\"Data\", \"Report\")/?serialNumber=' + SN(), target: '_blank' }" class="btn btn-warning createNew"> View Report </a>
这样既保留了参数传递的逻辑,又能让链接在新标签页正常打开。
方案2:用click绑定手动控制新标签页打开
如果方案1还是有问题,可以换个思路,通过click事件来接管跳转逻辑,同时保留href的参数绑定:
<a data-bind=" attr: {href: '@Url.Action(\"Data\", \"Report\")/?serialNumber=' + SN()}, click: function() { window.open($(this).attr('href'), '_blank'); return false; } " class="btn btn-warning createNew"> View Report </a>
这里的return false是为了阻止标签的默认跳转行为,让我们手动调用的window.open来完成新标签页打开的操作。
方案3:原生target配合新版Knockout
如果你偏好把target写在标签上,可以直接给加target="_blank",但要确保你的Knockout版本是较新的——旧版本对原生属性和data-bind绑定共存的场景可能有处理bug。如果项目允许升级Knockout,这个方法最简单直接。
这些方案都能保留你需要的参数传递功能,同时实现新标签页打开的需求,你可以根据项目情况选最顺手的一种。
内容的提问来源于stack exchange,提问作者Alex K
相关产品推荐
相关产品推荐

