1

杜威十进分类法 (DDC) 是一种对书籍和文本进行分类的非常有用的方法。所以我试图找到一个实现它的三重下拉菜单。我用许多不同的方式搜索了它,但找不到任何东西。

我很久以前就看到了双下拉菜单和最近的三重下拉菜单,所以我可以自己实现这个。认为我的幸运猜测是,对 javascript 不太了解,我可以花费很多时间来实现它。

因此,我的问题。你知道我在哪里可以找到一个已经为实现 DDC 的下拉菜单制作的 javascript 代码吗?此外,当您选择所有字段时,它不需要重定向到另一个页面,因为它是用于需要其他字段的提交页面。这可能是被黑客入侵的想法。

如果您发布的不是 DDC,而是使用通用十进制分类的一些代码,这也是有效的。只是我更喜欢DDC。

如果我在任何地方都找不到它,我会尝试自己做并发布代码。

它应该以这种方式工作:第一个下拉菜单有以下选项:

  • 计算机科学、信息和一般工作
  • 哲学和心理学
  • 宗教
  • 社会科学
  • 语言
  • 科学(包括数学)
  • 技术与应用科学
  • 艺术和娱乐
  • 文学
  • 历史和地理

如果您选择了“科学”,那么第二个下拉菜单将获取这些值:

  • 科学
  • 数学
  • 天文学和相关科学
  • 物理
  • 化学与相关科学
  • 地球科学
  • 古生物学;古动物学
  • 生命科学
  • 植物
  • 动物科学/动物

假设现在您选择了“物理”,那么第三个下拉菜单将是这样的:

  • 经典力学;固体力学
  • 流体力学; 液体力学
  • 气体力学
  • 声音和相关振动
  • 光和超光现象
  • 电力和电子
  • 磁性
  • 现代物理学

如果您选择了“Heat”,那么下拉菜单的值将是:opt1=5, opt2=3, opt3=6,因为“Heat”对应于 536。

您可以在Wikipedia中查看完整结构。

4

3 回答 3

1

非 AJAXy 方法是将所有内容加载到同一页面上。菜单不需要 AJAX,只有非常简单的 JavaScript。该页面会大得多,但不会令人望而却步,因此我认为不会,相关代码可以放入单独的 .js 文件中,然后可以在客户端缓存,并且只需要下载一次。

于 2012-04-12T18:10:39.407 回答
0

进行搜索时,我发现了这个页面,其中一个人的问题基本相同。有一个名为essential的用户的回复。他似乎采用了明显的方法,AJAX,而最初的提问者似乎认为它成功了。

响应如下:


如果您更喜欢在页面中使用 AJAX,则可以实现这一点。为了获得它的基本知识,这里有一个简单的演示。

这个例子有 2 个单独的 html 文档:main.html 包含整个脚本,request.html 包含另一个选项,将根据请求注入到 main.html。

这是 main.html 的代码:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>JavaScript Demo</title>
<script type="text/javascript">
// <![CDATA[
/* No editing required -
   For demonstrational purposes only. */


// Declaring variables
var ajax, update, xmlData, getOptions;
var obj, select, option;

// This is a simple prototype that will skip the long declaration of ( element.getElementsByTagName( tagName )[reference] ).
// And now can be defined as element.obj( tagName, reference )
obj = Object.prototype.obj = function( tn, ref ) {
   if (( tn ) && ( typeof ref === "number" ) && ( ref !== null )) {
   return ( this.getElementsByTagName( tn )[ ref ] );
   } else {
   return (  this.getElementsByTagName( tn ));
   } 
};

// This is the function reference which is the one who handle's and process the request sent by the XMLHttpRequest object.

// And considered as the most important part of the whole program. 
getOptions = function() {
select = xmlData.responseXML.obj("select", 0)
option = select.obj("option");
oLen = option.length;
   for ( x = 0; x < oLen; x++ ) { document.obj("select")["lists"].remove( x );
document.obj("select")["lists"].add( new Option( option[x].childNodes[0].nodeValue,  option[x].getAttribute("value") ), x );
   }
};

ajax = function ( url ) {
xmlData = null;
   if ( window.XMLHttpRequest ) {
   xmlData = new XMLHttpRequest();
   } else if ( window.ActiveXObject ) {
      try {
      xmlData = new ActiveXObject("Microsoft.XMLHTTP");
      } catch( e ) {
          xmlData = new ActiveXObject("Msxml2.XMLHTTP");
      }
   }
   if ( xmlData !== null ) {
   xmlData.onreadystatechange = getOptions; 
   xmlData.open("GET", url, true);
   xmlData.send( null );
   } else {
     alert("\nYour browser does not support AJAX Request!"); 
   }
};

update = function( sel ) {
sel = ( document.getElementById ) ? document.getElementById( sel ) : document.all.sel;

index = sel.selectedIndex;

ajax( sel.options[index].value );
return;
}
// ]]>
</script>
</head>
<body>
<div id="content">
<form id="ajaxForm" action="#" onsubmit="return false;">
<div>
<select id="lists" name="lists" size="1" onchange="update( this.id );">
<option value="">Default List</option>
<option value="">Default List</option>
<option value="">Defaut List</option>
<option value="request.html">AJAX Demo - Request Lists!</option>
</select>
</div>
</form>  
</div>
</body>
</html>

这适用于request.html

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Request Page</title>
  </head>
  <body>
    <div id="content">
      <form id="frm" action="*" onsubmit="return false;">
        <div>
          <select id="sel" name="sel" size="1" onchange="ajax.listed(this.id);">
            <option value="">Requested List</option>
            <option value="">Requested List</option>
            <option value="">Requested List</option>
            <option value="main.html">AJAX Demo - Default Page!</option>
          </select>
        </div>
      </form>
    </div>
  </body>
</html>
于 2012-04-12T18:04:54.117 回答
0

由于 javascript 的“高级”代码与其他编程语言非常相似,因此花费的时间比预期的要少。在一些 bash 脚本的帮助下,不需要手动执行重复性任务,只需大约 20 小时。我真的不认为在这里粘贴大约 3000 行 javascript 是一个好主意,所以,正如我首先要求的那样,我在这里发布了 html 以及ddc.js 的这个链接。此外,您可以在此处对其进行测试并在此处查看说明。这两个链接都来自我的页面,其中涉及一些轻量级的 php,我不会发布,因为它不太相关(在注释中的第二个链接中解释)。

html:

<script language="JAVASCRIPT" src="ddc.js" type="text/javascript"></script>
<h1>Dewey Decimal Classification</h1><br><br>
    <form style="text-align: center;" onLoad="msDDC()" name="formDDC" method="POST">
        <select name="classesDDC" style="width: 300px; height: 24px; font-size: 14px;" onChange="changeDivisions()">
        <option value="">Select a class</option>
        <option value="0">0. Computer science, knowledge & systems</option>
        <option value="1">1. Philosophy and psychology</option>
        <option value="2">2. Religion</option>
        <option value="3">3. Social sciences</option>
        <option value="4">4. Language</option>
        <option value="5">5. Science</option>
        <option value="6">6. Technology</option>
        <option value="7">7. Arts</option>
        <option value="8">8. Literature</option>
        <option value="9">9. History, geography & biography</option>
    </select><br><br>
    <select name="divisionsDDC" style="width: 300px; height: 24px; font-size: 14px;" onChange="changeSections()">
        <option value="">Divisions will appear here</option>
    </select><br><br>
    <select name="sectionsDDC" style="width: 300px; height: 24px; font-size: 14px;">
        <option value="">Sections will appear here</option>
    </select><br><br>
    <input type="submit" value="Go!" style="width: 300px; height: 24px; font-size: 14px;">
    </form>
于 2012-04-16T14:31:36.257 回答