2010-07-03 99 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