- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要有关添加 javascript 时选项菜单不起作用的帮助。
我找到了此类下拉菜单的教程,菜单/下拉功能正常工作,但在选择选项时我无法让它执行我需要的操作。
当选择“非免费”时,我希望在菜单下打开 2 个 div。我在常规选项菜单上有适用于此的代码,该菜单未使用下面第一个示例中的 javascript 代码,但是当我尝试向此菜单添加其他功能代码时它不起作用。在使菜单正常工作的 javascript 中,有一些我没有看到或理解的东西。
原代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<style>
/*Form*/
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
form > div {
clear: both;
overflow: hidden;
padding: 1px;
margin: 0;
}
input[type=text]:focus, input[type=email]:focus, input[type=url]:focus, input[type=password]:focus, textarea:focus {
outline: 0;
border: #f76e00 1px solid;
}
/*Dropdown*/
#dropdown {
background-color: #d8f3ff;
width: 100%;
padding: 10px;
text-align: left;
}
#dropdown2 {
background-color: #eaeaea;
width: 100%;
padding: 10px;
text-align: left;
}
#dropdown3 {
background-color: #d8f3ff;
width: 100%;
padding: 10px;
text-align: left;
}
.dropcont {
position: relative;
font-size: 12px;
color: #666;
text-decoration: none;
text-align: left;
}
.trigger {
color: #666;
padding: 10px;
font-size: 12px;
width: 100%;
background: #fff url(../images/select-arrow-open.png) 98% center no-repeat;
display: block;
border: 1px solid #ccc;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
text-decoration: none;
text-align: left;
}
.trigger:hover {
color: #666;
background: #f5f5f5 url(../images/select-arrow-open.png) 98% center no-repeat;
border: #f76e00 1px solid;
text-decoration: none;
text-align: left;
}
.activetrigger {
color: #666;
padding: 10px;
font-size: 12px;
width: 100%;
background: #f5f5f5 url(../images/select-arrow-close.png) 98% center no-repeat;
display: block;
border: #f76e00 1px solid;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
text-decoration: none;
text-align: left;
}
.activetrigger:hover {
background: #f5f5f5 url(../images/select-arrow-close.png) 98% center no-repeat;
color: #666;
text-decoration: none;
}
.activetrigger:active {
background: #f5f5f5 url(../images/select-arrow-close.png) 98% center no-repeat;
color: #666;
text-decoration: none;
}
.dropcont ul {
font-size: 12px;
border: #f76e00 1px solid;
border-top: none;
background: #fff;
list-style-type: none;
padding: 10px;
margin: 0;
width: 100%;
z-index: 100;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
text-decoration: none;
text-align: left;
}
.dropcont ul li {
padding: 5px;
-webkit-transition: all 0.5s ease;
-moz-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease;
text-decoration: none;
text-align: left;
}
.dropcont ul li:hover {
background: #f5f5f5;
outline: none;
text-decoration: none;
}
.dropcont ul li:first-child {
display: none;
}
.dropcont ul li:last-child {
border-bottom: none;
}
.dropdownhidden {
display: none;
}
.dropdownvisible {
height: auto;
}
.dropdownvisible {
height: 100px;
overflow-y: scroll;
text-decoration: none;
text-align: left;
}
.label {
color: #666;
font-size: 12px;
margin-bottom: 5px;
display: block;
text-align: left;
}
a {
color: #666;
text-decoration: none;
}
a:hover {
color: #f76e00;
}
/* Navigation */
nav ul {
padding: 0 20px;
}
nav li {
list-style: none;
float: left;
margin-right: 20px;
padding: 10px;
font-weight: 300;
}
nav li.current {
background: #f5f5f5;
border: 1px solid #ccc;
border-bottom: none;
}
nav li.current a {
color: #777;
cursor: default;
}
#audiobook {
position: relative;
height: 200px;
width: 100%;
background-color: #6FF;
}
</style>
<script>
function tamingselect()
{
if(!document.getElementById && !document.createTextNode){return;}
// Classes for the link and the visible dropdown
var ts_selectclass='turnintodpdn'; // class to identify selects
var ts_listclass='turnintoselect'; // class to identify ULs
var ts_boxclass='dropcont'; // parent element
var ts_triggeron='activetrigger'; // class for the active trigger link
var ts_triggeroff='trigger'; // class for the inactive trigger link
var ts_dropdownclosed='dropdownhidden'; // closed dropdown
var ts_dropdownopen='dropdownvisible'; // open dropdown
/*
Turn all selects into DOM dropdowns
*/
var count=0;
var toreplace=new Array();
var sels=document.getElementsByTagName('select');
for(var i=0;i<sels.length;i++){
if (ts_check(sels[i],ts_selectclass))
{
var hiddenfield=document.createElement('input');
hiddenfield.name=sels[i].name;
hiddenfield.type='hidden';
hiddenfield.id=sels[i].id;
hiddenfield.value=sels[i].options[0].value;
sels[i].parentNode.insertBefore(hiddenfield,sels[i])
var trigger=document.createElement('a');
ts_addclass(trigger,ts_triggeroff);
trigger.href='#';
trigger.onclick=function(){
ts_swapclass(this,ts_triggeroff,ts_triggeron)
ts_swapclass(this.parentNode.getElementsByTagName('ul')[0],ts_dropdownclosed,ts_dropdownopen);
return false;
}
trigger.appendChild(document.createTextNode(sels[i].options[0].text));
sels[i].parentNode.insertBefore(trigger,sels[i]);
var replaceUL=document.createElement('ul');
for(var j=0;j<sels[i].getElementsByTagName('option').length;j++)
{
var newli=document.createElement('li');
var newa=document.createElement('a');
newli.v=sels[i].getElementsByTagName('option')[j].value;
newli.elm=hiddenfield;
newli.istrigger=trigger;
newa.href='#';
newa.appendChild(document.createTextNode(
sels[i].getElementsByTagName('option')[j].text));
newli.onclick=function(){
this.elm.value=this.v;
ts_swapclass(this.istrigger,ts_triggeron,ts_triggeroff);
ts_swapclass(this.parentNode,ts_dropdownopen,ts_dropdownclosed)
this.istrigger.firstChild.nodeValue=this.firstChild.firstChild.nodeValue;
return false;
}
newli.appendChild(newa);
replaceUL.appendChild(newli);
}
ts_addclass(replaceUL,ts_dropdownclosed);
var div=document.createElement('div');
div.appendChild(replaceUL);
ts_addclass(div,ts_boxclass);
sels[i].parentNode.insertBefore(div,sels[i])
toreplace[count]=sels[i];
count++;
}
}
/*
Turn all ULs with the class defined above into dropdown navigations
*/
var uls=document.getElementsByTagName('ul');
for(var i=0;i<uls.length;i++)
{
if(ts_check(uls[i],ts_listclass))
{
var newform=document.createElement('form');
var newselect=document.createElement('select');
for(j=0;j<uls[i].getElementsByTagName('a').length;j++)
{
var newopt=document.createElement('option');
newopt.value=uls[i].getElementsByTagName('a')[j].href;
newopt.appendChild(document.createTextNode(uls[i].getElementsByTagName('a')[j].innerHTML));
newselect.appendChild(newopt);
}
newselect.onchange=function()
{
window.location=this.options[this.selectedIndex].value;
}
newform.appendChild(newselect);
uls[i].parentNode.insertBefore(newform,uls[i]);
toreplace[count]=uls[i];
count++;
}
}
for(i=0;i<count;i++){
toreplace[i].parentNode.removeChild(toreplace[i]);
}
function ts_check(o,c)
{
return new RegExp('\\b'+c+'\\b').test(o.className);
}
function ts_swapclass(o,c1,c2)
{
var cn=o.className
o.className=!ts_check(o,c1)?cn.replace(c2,c1):cn.replace(c1,c2);
}
function ts_addclass(o,c)
{
if(!ts_check(o,c)){o.className+=o.className==''?c:' '+c;}
}
}
window.onload=function()
{
tamingselect();
// add more functions if necessary
}
</script>
</head>
<body>
<div id="dropdown2">
<form action="">
<label class="label">What is cost?</label>
<select class="turnintodpdn">
<option>This is:</option>
<option value="1">Free</option>
<option value="2">Not free</option>
</select>
</form>
</div>
</body>
</html>
在文档的头部我添加了这个:
<script>
function NotFreeSelectCheck(nfSelect)
{
if(nfSelect){
slctOptionValue = document.getElementById("slctOption").value;
if(slctOptionValue == nfSelect.value){
document.getElementById("NotFreeDivCheck").style.display = "block";
document.getElementById("ppaddrss").style.display = "block";
}
else{
document.getElementById("NotFreeDivCheck").style.display = "none";
document.getElementById("ppaddrss").style.display = "none";
}
}
else{
document.getElementById("NotFreeDivCheck").style.display = "none";
document.getElementById("ppaddrss").style.display = "none";
}
}
</script>
这是更新后的 html:
<div id="dropdown2">
<form action="">
<label class="label">What is cost?</label>
<select class="turnintodpdn" id="getFvalue" onchange="NotFreeSelectCheck(this);">
<option>This is:</option>
<option value="1">Free</option>
<option id="slctOption" value="2">Not free</option>
</select>
</form>
</div>
<div id="NotFreeDivCheck" style="display:none;">
Price field
</div>
<div id="ppaddrss" style="display:none;">
Payment Address
</div>
无论我做什么,如果在第一个代码示例中添加了 javascript,则在菜单中选择“非免费”时,我无法打开 div。如果我从第一个示例中删除样式和 javascript 函数并将菜单设为普通菜单,则代码可以正常工作并显示 div“NotFreeDivCheck”和“ppaddrss”。我需要做什么才能完成这项工作?
为了清楚起见,如您所见,如果删除第一个示例中的 javascript,则此代码有效:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script>
function NotFreeSelectCheck(nfSelect)
{
if(nfSelect){
slctOptionValue = document.getElementById("slctOption").value;
if(slctOptionValue == nfSelect.value){
document.getElementById("NotFreeDivCheck").style.display = "block";
document.getElementById("ppaddrss").style.display = "block";
}
else{
document.getElementById("NotFreeDivCheck").style.display = "none";
document.getElementById("ppaddrss").style.display = "none";
}
}
else{
document.getElementById("NotFreeDivCheck").style.display = "none";
document.getElementById("ppaddrss").style.display = "none";
}
}
</script>
</head>
<body>
<div id="dropdown2">
<form action="">
<label class="label">What is cost?</label>
<select id="getFvalue" onchange="NotFreeSelectCheck(this);">
<option>This is:</option>
<option value="1">Free</option>
<option id="slctOption" value="2">Not free</option>
</select>
</form>
</div>
<div id="NotFreeDivCheck" style="display:none;"> Price field </div>
<div id="ppaddrss" style="display:none;"> Payment Address </div>
</body>
</html>
请帮忙,谢谢!
最佳答案
您正在使用的脚本将所有 SELECT 元素转换为 DOM 下拉列表,因此您的这行函数不起作用:
slctOptionValue = document.getElementById("slctOption").value;
因为 document.getElementById("slctOption")
没有定义。您可以对其进行硬编码,因为它只是一个值:
slctOptionValue = 2;
此外,您的 onchange
将永远不会触发,因为 SELECT 正在被替换。而是修改这段代码:
newli.onclick=function(){
this.elm.value=this.v;
NotFreeSelectCheck(this.elm); /* Added this line */
ts_swapclass(this.istrigger,ts_triggeron,ts_triggeroff);
ts_swapclass(this.parentNode,ts_dropdownopen,ts_dropdownclosed)
this.istrigger.firstChild.nodeValue=this.firstChild.firstChild.nodeValue;
return false;
}
您还应该通过 JSHint 运行您的脚本。它缺少几个分号,并且还有其他问题需要清理。
这是一个 jsfiddle:http://jsfiddle.net/3k6795dm/17/
关于javascript - 添加 Javascript 函数时选项菜单不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30740416/
给定一个 Option[Future[Option[Int]]] : scala> val x: Option[Future[Option[Int]]] = Some ( Future ( Some
如果我理解正确,EitherT[Option,A,B] 应该与 Option[Either[A,B]] 相同,但编译器不同意.以下代码编译失败: def f[A,B] = implicitly[Eit
我刚开始在使用 parcel.js 构建静态 Assets 时遇到此错误。它在本地工作,但我在 Heroku 上的构建出错,我不确定它是否相关。 最佳答案 得到同样的问题。通过将 core-js 安装
当我生成 Telerik Report 时,只有 Export PDF 可用。即使我将 docx 和 xlsx 的配置设置为 true。这是我在网络配置中的配置。
我的 iTunesConnect 应用程序显示 Apple Pay 选项。我正在使用布伦特里。 即使我们没有在应用程序中使用 Apple Pay 功能。 有人可以帮我解决如何在我的 itunesCon
我正在 Raspbian 中从命令行运行以下查询: mysql -u $NAME -p $PASS Tweets -e "SELECT count(*) FROM raw_tweets;" 它输出以下
我正在尝试使用 ffmpeg(在 linux 下)为视频添加一个小标题。所以,我使用: ffmpeg -i hk.avi -r 30000/1001 -metadata title="SOF" hk_
我正在尝试使用 ffmpeg 使用 ffserver 流式传输视频。您将在 ffserver1.conf 文件下方找到 ffmpeg 命令的日志输出。 其中一个错误引用了预设,每次我尝试使用预设时,我
我正在尝试对 Option 使用 fold 或 map 操作而不是 match。 我有一个选项 val ao: Option[String] = xxxx 和一个函数 f: (String => Fu
Dockerfile documentation表示有可能通过 --platform FROM 中的选项像这样的指令: FROM [--platform=] [AS ] 在我的 dockerfile
我不确定“属性(property)”或“选项”是否是正确的术语,但这是我需要弄清楚的。 鉴于以下情况: ' $.fileup({ url: '/file/upload',
我正在尝试使用 jQuery 检查是否选择了值 = 1 的选择选项,然后将类添加到某些元素。但有些东西不起作用。可以请人看一下代码吗? 我的代码: Reservation
我对 VIM 中的这些感到困惑。有些事情需要设置,而另一些则让。 而且,我如何检查某个选项。我知道这是一个选项,因为我使用 set 来更改它。 例如,如何检查当前文件类型选项是否为 java? 最佳答
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我在看《Professional F# 2.0》一书作者展示如下代码 let a string : option = None if a.IsNone then System.Console.
我习惯使用方法顶部的 java 样板检查输入参数: public static Boolean filesExist(String file1, String file2, String file3
假设我有一串 "Insert Post -title Some PostTitle -category 2 -date-posted 2013-02:02 10:10:10" 我一直在尝试做的是将这个
从 1.3.70 EAP 开始,在 org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions 这是 var useIR: kotlin.Boolean 哪个激活
我无法获取订购捆绑商品的所有子产品及其选项。这可能吗? 最佳答案 以下是您如何找出哪些产品应与所有其他项目一起附加到列表中的捆绑产品中的方法: foreach ($order->getAllItems
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我是一名优秀的程序员,十分优秀!