我刚刚注意到,在 soundcloud 中,轨道上的“操作”按钮(例如,重新发布等...)都是 html 按钮标签。此外,它们既不在表单内,也不绑定(bind)到 la html5 表单,也不提交表单(它们显然是通过 javascript 处理的)。这是有效的 HTML 吗?按钮可以没有表单吗?或者这只是让这些按钮成为简单的可点击 div?这对屏幕阅读器来说有多有效/无效?
最佳答案
button 元素在文档正文中可能出现文本级标记的任何位置都是有效的。这样的元素不需要与 form 元素有任何关系。目前权威的引用是HTML 4.01 specification ,正式规则在 DTD 中,但您可以走捷径并使用 W3C Markup Validator检查文档是否有效。
当不与表单关联时,button 元素与 span 元素(而不是 div,它是 block -level 默认),但是 button 有特殊的默认渲染。浏览器和辅助软件可能也将 button 视为特殊的,最安全的做法是仅对应该触发某些操作的元素使用 button单击时。相反,此类元素通常最好使用 button 标记来表示,尽管您也可以通过其他方式(主要是图像或 CSS)创建视觉上类似按钮的元素。
在表单之外,button 元素默认有 type=button(这通常是它唯一合理的 type)。这意味着它只能通过 JavaScript 产生效果。这不会以任何方式使其无效。但是,您可以考虑通过 JavaScript 生成此类按钮,而不是将它们作为静态 HTML 内容,这样当脚本被禁用时,就不会出现什么都不做的(有效但)令人困惑的按钮。
解决以下评论中的澄清问题:
button type=button 元素类似于input type=button;不同之处在于后者没有内容,而是从 value 属性中获取按钮中显示的文本,而 button 具有可以“丰富”的内容(带有标记) .
对于任一元素,如果使用它们会导致服务器操作(通常通过 Ajax 调用),那么我们确实可以询问页面如何在禁用 JavaScript 的情况下工作。但这个问题可能无关紧要(也许该页面是一个无论如何都应该使用 JavaScript 运行的应用程序),并且无论如何正式这个想法都没有错。
它们为什么存在?为了作者的方便和遗留原因,我会说。同样,有人可能会问为什么 HTML 根本没有事件属性,如果没有客户端脚本它们就不可能工作,并且您可以将事件处理程序分配给 JavaScript 中的元素。但在早期,这是不可能的,即使是现在,使用 button 元素或 onclick 属性可能比在 JavaScript 中做事更方便(以及,为了让元素看起来像一个按钮,CSS)。还有一点是 button 和 input type=button 为元素创建了依赖于浏览器的外观,对于大多数用户来说,任何具有他浏览器的默认按钮样式被视为按钮。
关于html - 表单之外的按钮 html 标签是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461658/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务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
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案