以下是构建链接的两种方法,其唯一目的是运行JavaScript代码.哪个更好,在功能,页面加载速度,验证目的等方面?
function myJsFunc() {
alert("myJsFunc");
}Run Code Online (Sandbox Code Playgroud)
<a href="#" onclick="myJsFunc();">Run JavaScript Code</a>Run Code Online (Sandbox Code Playgroud)
要么
function myJsFunc() {
alert("myJsFunc");
}Run Code Online (Sandbox Code Playgroud)
<a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a>Run Code Online (Sandbox Code Playgroud)
<a href="javascript:void(0)" id="loginlink">login</a>
Run Code Online (Sandbox Code Playgroud)
我见过href很多次,但我不知道究竟是什么意思.
我已经看到了将JavaScript代码放入<a>标记的以下方法:
function DoSomething() { ... return false; }
Run Code Online (Sandbox Code Playgroud)
<a href="javascript:;" onClick="return DoSomething();">link</a><a href="javascript:DoSomething();">link</a><a href="javascript:void(0);" onClick="return DoSomething();">link</a><a href="#" onClick="return DoSomething();">link</a>我理解尝试放置有效URL而不仅仅是JavaScript代码的想法,以防用户没有启用JavaScript.但是为了讨论的目的,我需要假设启用了JavaScript(没有它就无法登录).
我个人喜欢选项2,因为它可以让你看到将要运行的内容 - 在调试传递给函数的参数时尤其有用.我已经使用了很多,并没有发现浏览器问题.
我读过人们推荐4,因为它给了用户一个真实的链接,但实际上,#不是"真实的".它绝对不会在哪里.
当您知道用户启用了JavaScript时,是否有一个不支持或非常糟糕?
我在HTML中有一些模型
<a href="javascript:ShowOld(2367,146986,2)"><img title="next page" alt="next page" src="/themes/me/img/arrn.png"></a>
Run Code Online (Sandbox Code Playgroud)
我在发送请求时收到了服务器的响应.
通过这个模型,我获得了将我的代码发送到服务器的AJAX请求的响应.
好吧,一切都很好但是当我点击链接时,浏览器想要打开该功能作为链接; 点击后我看到地址栏为
javascript:ShowOld(2367,146986,2)
Run Code Online (Sandbox Code Playgroud)
意思是浏览器的东西,如果我想在firebug中这样做,那就是url.现在我想这样做然后当任何人点击链接时,浏览器会尝试调用已经加载到DOM中的函数,而不是尝试在浏览器中打开它们.
我有一个图像,使用链接到另一个页面<a href="..."> <img ...> </a>.
如果它是一个按钮,我如何使它成为一个帖子<input type="submit"...>?
如何从href调用javascript?
喜欢:
<a href="<script type='text/javascript'>script code</script>/">Call JavaScript</a>
Run Code Online (Sandbox Code Playgroud) 我想在JSFiddle中添加一些代码.它没用.缩小它我甚至无法使用这个最简单的代码:
function displaymessage() {
alert("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)
<form>
<input type="button" value="Click me!" onclick="displaymessage()" />
</form>
<p>By pressing the button above, a function will be called. The function will alert a message.</p>
Run Code Online (Sandbox Code Playgroud)
该alert框未显示在JSFiddle中.
我们有一个DotNetNuke模块在DotNetNuke 5.4.4的实例中运行,安装在"Server A"上,这是一台带有IIS 6.1和Internet Explorer 11的Windows Server 2008 R2 Standard机器.
我们使用Internet Explorer 9从运行Windows Server 2008 Standard的"Server B"访问我们的DotNetNuke模块.
当我们onclick在服务器B上访问我们的模块时,单击具有属性的锚点html元素时会发生此问题.
onclick的锚点如下:
<a onclick='OpenWindow("/DotNetNuke/DesktopModules/Module/View.aspx?dt=%c2%b2%c2");return false;'
href="http://000.00.0.0/DotNetNuke/DesktopModules/Module/View.aspx?dt=%c2%b2%c2"
target='_blank'
jQuery1431968126278="42">Doc name (SSN-SS-SSNN)</a>
Run Code Online (Sandbox Code Playgroud)
而OpenWindow函数就是这样的
function OpenWindow(url) {
window.open(url, '', 'top=15,scrollbars=yes,menubar=no,height=800,width=800,resizable=yes,toolbar=no,location=no,status=no');
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我们有一个带有onclick属性的anchor元素,它应该调用OpenWindow javascript函数,然后返回false,因此单击一个锚点(浏览到href)的默认操作不会发生.
当我们单击此链接时(仅在服务器B上),我们没有弹出窗口,OpenWindow函数中没有断点,浏览器通过打开一个新选项卡(View.aspx)导航到href.这告诉我,onclick属性引用的OpenWindow函数由于某种原因甚至不运行,即使它在anchor元素上,并且可以在任何其他服务器上运行.
我比较了服务器A DotNetNuke和我的本地开发人员DotNetNuke实例之间的安全设置,web.config文件和DotNetNuke设置,发现设置没有差异.
我将Server B Internet Explorer安全设置与我的安全设置进行了比较,发现设置没有差异.
根据对此问题的评论建议,我尝试将锚标记更改为span标记(删除了href和目标属性),我看到了相同的行为.它适用于服务器A和开发人员,但现在不在服务器B上执行任何操作.我认为核心问题是onclick属性未被识别,或者被某种方式阻止.
我现在更进一步,将大多数<a>...</a>标签更改为<span>...</span>标签,使用特定的类,然后我将jQuery(...).live('click', ...)处理程序附加到(使用jQuery 1.4.2).这是允许点击工作,但我仍然没有解决为什么忽略onclick属性.
如果我打开开发人员工具(IE9),然后单击"编辑"按钮再次打开和关闭编辑模式,锚标签和img标签上的所有onclick属性开始正常工作,直到我重新加载页面.
如果我通过开发人员工具以任何方式手动编辑onclick处理程序,比如说return false;从onclick处理程序中删除它,它会工作,但是如果我把return false;它放回去使它像我从未改变任何东西那样,它会再次停止工作.
我正在找一块墙来检查这个问题.我无法在我的开发人员计算机上重现它,它也适用于服务器A,所以代码工作得非常好.我想我必须有一个设置,我忽略了某个地方,但在哪里?我不知道此时还有什么要检查,我正在寻找想法.
我有一个自定义日期选择器弹出窗口有时无法在IE中工作.它适用于Chrome和Edge.
代码看起来像这样:
<frameset>
<frame>Buttons for next/prev month/year</frame>
<frame>This is the actual calendar that gets redrawn when the above buttons are used
<a href="javascript:parent.opener.setDate(1);">1</a> //there's a different anchor tag for each day of the month
</frame>
<frameset>
Run Code Online (Sandbox Code Playgroud)
所以这里有点奇怪.我们有两个网络,称之为新旧.旧的可能有很多无证的全球政策变化,新的可能接近政府标准.这适用于旧网络上的任何浏览器,但不适用于新网络上的IE(11).它适用于Edge.此外,如果顶部框架按钮用于选择下一个/上个月,或仅选择"今天"按钮,则所有底部框架锚定链接都能正常工作.没有控制台错误/警告,网络监视器中没有任何内容显示请求返回错误代码,点击只是不注册.我在customFunction()中放置一个断点,当链接不起作用时它不会中断,但是如果链接可以工作,它将会中断.
唯一对我来说很奇怪的是整个弹出窗口的代码看起来像:
str = "<frameset><frame name='topFrame' " +
"src='javascript:parent.opener.drawTop'></frame><frame name='bottomFrame' "+
"src='javascript:parent.opener.drawBottom'><frame</frameset>"
document.write(str);
Run Code Online (Sandbox Code Playgroud)
我确实想检查一下,当使用prev/next/etc按钮时重绘底部框架的代码与第一次加载时调用的函数相同.
然而,看起来奇怪的是,在第一次加载时,DOM检查器显示所有内容(顶部框架,底部框架包括每月每天的所有单独数字等),但调试器(F12工具)不显示用document.write(str)加载的代码; 线.为了能够看到该代码并设置断点,我必须使用prev/next按钮,然后在Debugger中显示另一个.html文件,该文件具有与DOM匹配的构造HTML.
两者之间有什么区别吗?
1 : <a href="javascript:MyFunction()">Link1</a>
Run Code Online (Sandbox Code Playgroud)
和
2 : <a href="#" onclick="MyFunction()">Link2</a>
Run Code Online (Sandbox Code Playgroud)
?会以任何方式影响页面性能吗?
知道为什么这个JavaScript只显示"阻止"而不是(隐藏)DIV的内容?
<html>
<body>
<div id="mydiv" style="display:none">TEST</div>
<a href="javascript:document.getElementById('mydiv').style.display='block';">Show my DIV</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我也试过'内联'但结果相同.
return false/true也失败了.
onclick =''也失败了.
我知道有style.visibility等但我不需要/块.
此函数应该在链接内部工作,我不想调用外部JS函数.
谢谢!
javascript ×11
html ×7
href ×2
asp.net ×1
css ×1
debugging ×1
dotnetnuke ×1
form-submit ×1
frameset ×1
jsfiddle ×1
onclick ×1
optimization ×1
performance ×1
url-link ×1
void ×1