2010-07-03 61 views
3

我有一个验证为XHTML 1.0 Strict的网页。我正在使用YUI3,并且正在使用基于种子文件的实例化。在我的javascript代码的几个地方,我做的是这样的:在YUI3中为什么Y.one返回null?

YUI().use("node", function(Y){ 
    var node = Y.one("#my_element_id"); 
}); 

它的伟大工程,跨平台,跨浏览器等几乎在每一个案件。但是,我昨天正在测试,而且我偶然发现有一次它不起作用。它没有任何意义对我来说,我试图抓住的因素是:

<form id="component_form" method="post" action="<?php echo $_SERVER["PHP_SELF"];?>"> 
... 
</form> 

我肯定知道这是良好的标记,所以这不是问题。如果我做的:

YUI().use("node", function(Y){ 
    var node1 = Y.one("#component_form"); 
    var node2 = document.getElementById("component_form"); 
    var node3 = Y.one(document.getElementById("component_form")); 
}); 

节点1是空的,节点2是我一直在寻找的元素,所以是节点3。

任何人都有类似的经历,或知道这是一个YUI3错误还是什么?

下面是一个完整的标记示例:

<!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="content-type" content="text/html;charset=UTF-8"/> 
    <!-- metadata --> 
    <title>Inventory Management System</title>  
    <script type="text/javascript" src="http://yui.yahooapis.com/3.1.1/build/yui/yui-min.js"></script> 
    <script src="./util.js" type="text/javascript"></script>  
    <style type="text/css"> 
     td{ 
     vertical-align:text-top; 
     } 

     legend{ 
     border: 2px #D4D0C8 groove; 
     padding: 2px;  
     font-weight: bolder; 
     } 

     fieldset{ 
     border: 2px #D4D0C8 groove; 
     padding-bottom: 12px;    
     padding-left: 10px; 
     padding-right: 10px; 
     } 

     label{ 
     font-weight: bold; 
     } 

     #err_container{ 
     color: red; 
     display: none; 
     visibility: hidden; 
     margin: 10px; 
     } 

     #status_container{ 
     color: green; 
     display: none; 
     visibility: hidden; 
     margin: 10px; 
     }  
    </style> 

    </head> 
    <body> 
    <div id="canvas"> 
     <form id="st_frm" method="post" action="" style="display:none; visibility: hidden;">   
     <fieldset style="border:none; margin:0; padding:0;">   
      <input type="hidden" name="state" id="st" value=""/>    
     </fieldset> 
     </form> 

     <div id="navbar"> 
       <a href="#" onclick="goToState(0); return false;">home</a> 
     | components |   <a href="#" onclick="goToState(2); return false;">products</a> 
      </div> 


       <h1 id="main_h1"> 

      Update Component 
        </h1> 
     <form id="component_form" method="post" action="/inventory/index.php"> 
      <fieldset>    
      <legend id="component_form_legend">Component Information</legend> 
      <input type="hidden" id="component_form_id" name="id" value="8"/> 
      <input type="hidden" name="state" value="1"/> 
      <table> 

       <tr> 
       <td><label for="manufacturer_name_id">Manufacturer:</label></td> 
       <td><input type="text" id="manufacturer_name_id" name="manufacturer_name" value="Vishay"/></td> 
       </tr> 
       <tr> 
       <td><label for="manufacturer_part_number_id">Part Number:</label></td> 
       <td><input type="text" id="manufacturer_part_number_id" name="manufacturer_part_number" value="1123114123"/></td> 
       </tr> 

       <tr> 
       <td><label for="ct_id">Component Type:</label></td> 
       <td> 
        <select id="ct_id" name="component_type"> 
        <option value="0">New Type</option>      
             <option value="5" >sfkd</option> 
             <option value="6" >qwrqew</option> 

             <option value="7" selected="selected" >Resistor</option> 

        </select> 
        <input id="nct_id" type="text" name="new_component_type" size="10" style="visibility:hidden; display: none;" /> 
       </td> 
       </tr> 
       <tr> 
       <td><label for="description_id">Description:</label></td> 
       <td> 

        <textarea id="description_id" name="description" rows="3" cols="25">limits the flow of current...</textarea> 
       </td> 
       </tr> 
       <tr> 
       <td>&nbsp;</td>         
       <td> 
            <input id="component_form_submit_button" type="button" value="Update Component"/> 
        <span id="component_form_hide_when_new" > 
        <input id="component_form_delete_button" type="button" value="Delete Component"/> 

        <input id="component_form_new_button" type="button" value="New Component"/> 
        </span>     
        <input id="component_form_delete" name="delete" type="hidden" value="0"/> 
       </td> 
       </tr> 
       <tr> 
       <td colspan="2"> 
        <div id="error_container">&nbsp;</div> 
        <div id="status_container">&nbsp;</div>     
       </td> 

       </tr> 
      </table> 
      </fieldset> 
     </form> 

     <ul id="component_form_list">   
      <li> 
      <a href="#" onclick="setNodeValue('component_form_id', 8); submitForm('component_form'); return false;">Vishay 1123114123</a> 
      </li> 

     </ul>   


    </div> 

    </body> 
</html> 

EDIT IE 8个崩溃的变种S = ...线因为FRM为空。

function submitForm(frmId){ 
    YUI().use("node", function(Y){ 
    var frm = Y.one("#" + frmId);  
    var s = typeof frm.submit; 
    if(s === 'function'){ 
     frm.submit(); 
    } 
    });  
} 

但是....

function submitForm(frmId){ 
    YUI().use("node", function(Y){ 
    var frm = Y.one(document.getElementById(frmId));  
    var s = typeof frm.submit; 
    if(s === 'function'){ 
     frm.submit(); 
    } 
    });  
} 

作品均...

+1

使用一个简单的测试用例(XHTML 1.0 Strict标准,表单元素等),我无法重现您的问题('node1' ==='node3')。 – 2010-07-03 17:00:51

+0

@Marcel完全标记现在包含在帖子中 – vicatcu 2010-07-05 01:04:16

+0

奇怪的是,我用util.js中的'node1 ... 3'代码再次测试了它,但是它仍然在Firefox中输出正确的'node1'对象(==='node3' 3.6.6和Chromium 5.0.375.86,都在Linux下运行)。你用什么浏览器测试了这个问题?顺便说一句,第二个'script'元素中的'./'不是必须的(但不会给你带来问题)。 – 2010-07-05 15:43:57

回答

0

你错过一个双引号?

<form id="component_form" method="post" action="<?php echo $_SERVER["PHP_SELF"];?>"> 

...

+0

您的意思是?该网页验证在http://validator.w3.org/,所以我怀疑这就是它... – vicatcu 2010-07-03 16:28:58

+0

哦对不起我的坏: – Fopfong 2010-07-03 16:36:10

+1

我不能再现它。你能提供完整的标记吗? – Fopfong 2010-07-03 16:49:51