是否可以使输入像链接(Chrome)一样运行
Is it possible to make input act like a link (Chrome)
我想要一个input type="button"
像浏览器的链接一样(因此,可以右键单击输入并查看链接的上下文菜单(在新选项卡中打开链接,在新窗口中打开链接等)。我有一个带有提交按钮的表单:
<input type="submit" value="Run Query"/>
为了创建一个链接并拥有这个上下文菜单,我用以下方式替换了input
:
<a href="#" onclick="$(this).parent().submit(); return false;">Run Query</a>
但是这样"在新选项卡中打开链接"会打开同一页面(由于 href 属性)。我知道您只需按 ctrl+单击<input type="submit"/>
即可在新选项卡中打开它,但如果存在 input
标签,则 Chrome 中没有上下文菜单。是否可以创建与链接具有相同上下文菜单的输入?或者有什么技巧可以告诉浏览器将此功能添加到input
标签中?
如果我
正确理解您的问题,您想将表单提交到新选项卡吗?然后,您可以在表单元素上使用target="_blank"
。
<form action="" method="POST" target="_blank" >
<input type="submit" />
</form>
这将使用查询字符串将每个输入字段的值传递到新窗口或选项卡并提交。如果您正在发布文件,它将不起作用(解决方法是在选择文件时立即上传文件,为其提供一个 ID 并将其存储在隐藏字段中,因此文件 ID 是要发布的文件)。
请注意,这是一个示例,您应该使用更好的方法来处理查询字符串和浏览器兼容性(仅在Chrome上进行了测试)。在发布此版本之前,您应该在其他浏览器中对其进行彻底测试!我也不知道它将如何在iOS/Android/Windows Phone等浏览器中工作。我想说的是,你可能不应该使用它。
<body>
<form action="http://google.com">
<input type="text" name="stuff" value="" />
<input type="text" name="q" value="" />
<a href="#">Submit</a>
</form>
<script>
!function () {
var form = document.querySelector("form")
var submitButton = document.querySelector("a")
var queryString = location.search.slice(1).split("&").reduce(function (seed, str) {
var pair = str.split("=")
seed[pair[0]] = decodeURIComponent(pair[1])
return seed
}, {})
Object.keys(queryString).forEach(function (qsKey) {
var formEl = form.querySelector("[name='" + qsKey + "']")
if(formEl)
formEl.value = queryString[qsKey]
})
if(queryString.submit)
form.submit()
submitButton.addEventListener("contextmenu", updateHref) // Update on right click
submitButton.addEventListener("click", function (e) {
if(e.altKey || e.ctrlKey || e.shiftKey || e.which === 2 /* middle mouse button */) {
updateHref()
} else {
e.preventDefault()
form.submit()
}
})
function updateHref() {
var values = [].slice.call(form.elements).map(function (el) {
return el.name + "=" + encodeURIComponent(el.value)
})
submitButton.href = location.pathname + "?submit=1&" + values.join("&")
}
}()
</script>
</body>
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何使函数像回调一样运行
- 像谷歌分析一样加载js脚本,然后运行一个函数
- ng-重复运行次数与整数参数一样多在某些情况下不起作用
- 有没有办法防止字符串像多维数组一样运行
- 是否可以使输入像链接(Chrome)一样运行
- 原型链接、调用父方法的行为就像父构造函数从未运行过一样
- 如何获取html元素运行时代码以生成通用副本?就像复制文本框中输入文本一样
- 如何在我的HTML页面中运行Node.js脚本,就像我在PHP中一样
- 在函数中运行代码,就好像它在另一个作用域中运行一样
- 像桌面应用程序一样运行Node Webkit
- 是否可以像使用PHP文件一样使用Node.js而不运行服务器
- 为什么fiddle代码在dropbox上运行不一样
- 如何使html页面的本地副本像在线版本一样运行