如何在加载 jQuery 之前阻止点击事件中的链接?
原因是我几乎没有通过 jQuery ajax 函数进行 AJAX 调用的链接,如果用户在加载 jQuery 框架之前单击它们,浏览器将无法触发 jQuery ajax 函数并将跟随链接 href="..." .
编辑:我可以用这个吗?
<head>
...
<script type="text/javascript">
window.onload = prevCl();
function prevCl() {
var links = document.links[];
links.onclick = check();
}
function check() {
if (typeof jQuery == 'undefined') {
return false;
}
}
</script>
</head>
最佳答案
四种选择:
选项 0
去读Sean Hogan's answer ,他指出这可以通过委托(delegate)来完成 (doh!),我整理了一个示例实现。
选项 1
您可以制作 href链接“#”直到加载 jQuery,然后(如果合适的话)将其更改为它真正应该的样子。您可以存储 href 的内容应该在 data- 中属性,例如:
<a href='javascript:;' data-href='realtarget.html'>blah</a>
然后:
jQuery(function($) {
$("a[data-href]").each(function() {
var $this = $(this);
$this.attr("href", $this.attr("data-href"));
});
});
同样,只有当你真的需要将 href 设为 href 时,最后一点才有效。如果您通过 JavaScript 处理点击,则不需要。
如果验证是您开发周期的重要组成部分,请务必注意 data-xyz 形式的属性在 HTML4 及之前的版本中无效(浏览器实际上并不关心,但同样,如果您使用验证...)。它们从 HTML5 开始有效。
选项 2
使用内联 onclick属性在 jQuery 加载之前拦截点击,基本上说“对不起,等一下”。所以在 script标记在文件的顶部:
function sorryLoading() {
alert("Sorry, the page is still loading, one moment please.");
return false;
}
...然后在链接上:
<a href='realtarget.html' class='sorry' onclick='return sorryLoading();'>blah</a>
...然后删除 onclick在 jQuery 加载上:
jQuery(function($) {
$("a.sorry").removeClass('sorry').attr("onclick", "").click(yourRealClickHandler);
});
(您可以保留最后一点 - click 调用 - 如果它们不都具有相同的点击处理程序。)
我在上面使用了一个类来区分这些链接和其他可能具有内联 onclick 的链接(否则,令人惊讶的是,选择器“a[onclick]”实际上适用于适用于 Linux 的 Chrome、Opera 和 Firefox 以及适用于 Windows 的 IE6 和 IE8)。
选项 3
因为听起来您希望页面在 jQuery 加载之前无法正常工作,所以这是另一种方法:
head 中您页面的一部分(不在底部,我通常建议将它放在底部)。body 之前标记,连接您的点击处理程序而不将它们包装在 jQuery.ready 中调用(或其任何快捷方式)。原因是:#1 将确保在呈现页面之前加载 jQuery 本身,#2 将尽快连接处理程序。谷歌建议在页面末尾使用这样的标签(而不是 ready 函数或类似函数),并表示此时 DOM 元素将准备好被发现。
另外,当然,您希望通过执行所有页面加载优化工作来确保链接不执行用户期望的时间绝对尽可能短你可以。单击一个链接而不让它按照它看起来的样子进行操作会导致糟糕的用户体验。
关于javascript - 在加载 jQuery 之前阻止链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3811513/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?