javascript你可能不知道的事


  此文要跟大家分享的是在項目開發中積累的js問題解決方案和經驗,文章標題javascript你可能不知道的事只是個噱頭或者說是我感覺這些經驗對那些大牛(或經驗比較豐富的人)可能只能算得上比較基礎的東西了,但這並不妨礙我寫這篇博客——我想對其它不知道這些經驗技巧或曾被這些問題困擾過的程序員,應該還是會有一定幫助的,哪怕只有一點點兒,也是讓我比較寬慰和高興的事。所以,無論你願不願意看,我都將這些經驗分享給你,^_^。

  1.如果應該或本來正常顯示的頁面中的彈出層等,出現某些樣式加載不上的情況(如:jquery-ui彈出層的樣式加載不上),可能原因是:頁面中存在重復的js文件引用

  2.在iframe中改變父窗體的url代碼實現:window.top.location = http://www.huohu123.com/?src=qd;

  3.新窗口打開頁面的另一種方法:

 1 <a class="d" title="<%#Eval("ZPName")%>" onclick="javascript:return;" href="ajax/CommonProcess.ashx?method=searchOtherArticle&id=<%#Eval("ZPID")%>&type=<%#Eval("ZPType")%>"
2 target="_blank">
3 <div>
4 <img onclick="FarwardToZpViewPage(this)" src='<%#BLL.Util.GetZuopinThumbImage(Eval("ZPDefaultImg").ToString())%>'
5 alt="" /></div>
6 </a>
7 <script type="text/javascript">
8 function FarwardToZpViewPage(obj) {
9 if (document.all) {
10 // For IE
11 obj.parentNode.parentNode.click();
12 }
13 }
14 </script>

  4.頁面中的window.onload事件只會執行一次,如下:

    <script type="text/javascript">

        window.onload = function () {

            alert(new Date().getTime());

        };

        window.onload = function () {

            alert("ddfdfdfdfdf"); //——只會 彈出此提示

        };

      </script>

      原因分析如下:window事件——可以理解為一個事件對象(集合),其底層代碼大概實現:var winEventObj={};  winEventObj.onload= functionA;winEventObj.onload= functionB; 這段代碼就很清晰了:最終 winEventObj.onload的值 肯定為:functionB。

  

     5.js中對象是按引用傳遞的,如下:

       function test123() {
            var obj = new Object();
            obj.Num = 123;
            T1(obj);
            alert(obj.isValid);//---輸出 true
        }

        function T1(obj) {
            obj.isValid = true;   
        }

  6.jQuery和DOM對象的區別,如下代碼

  Test_Set和Test_Set2方法分別是在id為webTitle的標簽的jQuery和DOM對象上設置(添加)一個showNo的屬性,但不同的是,在jQuery對象上設置后再通過標簽對象輸出showNo的屬性值卻是'undefined',其原因,我的分析理解是:DOM對象(在內存中)存在真正的引用,而jQuery對象是其DOM對象的一個封裝對象,並沒有真實的引用存在

       function Test_Set() {
var obj = $("#webTitle")[0];
alert(obj);
obj.showNo = 121212;
alert(obj.showNo);
alert($("#webTitle")[0].showNo); //輸出:121212
}

function Test_Set2() {
var obj = $("#webTitle");
obj.showNo = 121212;
alert(obj.showNo);
alert($("#webTitle").showNo); //輸出:undefined
}

  7.&&(與運算符)的另外一種用法——讓代碼更簡潔點兒,其用法具體可參見上一篇文章(改進版)jQuery表單驗證插件formValidator的插件里,示例如下:         

  !_jQuery_formValidator_validJqObj_Array && (_jQuery_formValidator_validJqObj_Array = new Array());

      上面這行代碼的最原始的寫法是:

  if (_jQuery_formValidator_validJqObj_Array == null) {
            _jQuery_formValidator_validJqObj_Array = new Array();
     } 

  這樣意思就很明確了。這種用法比較特殊,類似於C#中如下代碼

        private PreferentialRuleDiscountRepository _repository = null;

private PreferentialRuleDiscountRepository Repository
{
get
{
return _repository ?? (_repository = new PreferentialRuleDiscountRepository());
}
}

  即如果&&左邊的條件成立為true,則執行右邊的代碼。

  

  好了,目前能跟大家分享的就是上面這幾點經驗,再基礎的都不能再寫了,恐怕這些讓人看了都很想拍磚了,呵呵... 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM