【问题标题】:Triple drop down menu with the Dewey Decimal Classification杜威十进分类法的三重下拉菜单
【发布时间】:2012-04-25 01:56:28
【问题描述】:

Dewey Decimal Classification (DDC) 是一种对书籍和文本进行分类的非常有用的方法。所以我试图找到一个实现它的三重下拉菜单。我用谷歌搜索了很多不同的方法,但没有找到。

我很久以前就见过double drop down menu 和最近的triple drop down menu,所以我可以自己实现这个。认为我的幸运猜测是,我对 javascript 不太了解,因此我可以花费很多时间来实现它。

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

如果您使用Universal Decimal Classification 发布了一些代码而不是 DDC,那么这也是有效的。只是我更喜欢 DDC。

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

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

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

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

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

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

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

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

你可以在Wikipedia看到完整的结构。

【问题讨论】:

  • 那为什么不自己动手,遇到困难再问呢?另外,这个“三重下拉菜单”是如何工作的?
  • 因为我目前专注于学习 PHP 和 MySQL,对 javascript 不太感兴趣,但我需要它来继续学习。在主要问题中解释了它的工作原理。
  • 我关于“[它] 将如何工作”的问题与我不明白每个下拉菜单中应该包含的内容有关。第一个中的选择是什么,第二个中应该出现什么以响应从第一个下拉列表中选择的内容。同样,在第二个中做出选择后,第三个应该出现什么......?
  • 好的,抱歉,再次编辑。

标签: javascript html document-classification


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    通过搜索,我找到了this page,其中一个人的问题基本相同。有一个名为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>
    

    【讨论】:

    • 那些被称为“双重下拉菜单”或“三重下拉菜单”,我已经知道它们了。实际上,如果您检查了我在问题中提出的this link,您会发现这种脚本正是我在那里发布的(在 javascript 中)。我实际上是在询问已经实现的 DDC 的一些资源,而不是关于制作它的方法。无论如何,谢谢你的帮助。
    【解决方案3】:

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

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2018-01-27
      • 2021-03-01
      相关资源
      最近更新 更多