2009-11-18 68 views
0

關於jQuery仍然有點「gu」「。這個簡單的彈出窗口腳本看起來好嗎?我的jQuery邏輯正確嗎?新的jQuery,簡單的彈出窗口腳本,任何問題?

我在代碼評論中有幾個問題,我很好奇。

$(document).ready(function() 
{ 
    $("a[target='popup']").click(function(event) 
    { 
     var $href = $(this).attr('href'); // should I use "this.href"? 
     var $name = $(this).attr('target'); // does the window name matter? 
     var $config = 'width=590, height=590, top=20, left=60, scrollbars=1'; 
     var $popup = window.open($href, $name, $config); 

     if (window.focus) // is this even necessary? 
          // any other conditions I should check instead? 
     { 
      $popup.focus(); 
     } 
     event.preventDefault(); // should this be above $popup.focus()? 
    }); 
}); 

看來工作,但由於該腳本將是我的網站上獲取的RSS訂閱重要的,我想我會確保。

回答

1

//我應該使用「this.href」嗎? 不,請使用jquery選擇器 - 如果您打算使用$(this)很多,請在開始時將它放入一個變量中,這樣您就不必每次都創建jquery對象兩次,所以你創建一個jQuery對象兩次)。

//窗口名稱問題? 如果您稍後想要對窗口執行任何操作,例如關閉窗口或更改其位置,則需要使用該名稱。這只是一個窗口的句柄。

//這甚至有必要嗎? 這只是確保你可以做你即將嘗試的東西 - 這是一個功能測試,以確保在focus()方法不可用時不會產生錯誤。

//我應該檢查其他任何條件嗎? Nope - 測試您將調用的函數(當您關注彈出窗口時調用它)。

//這應該在$ popup.focus()之上嗎? 不需要。最好將這個留到最後,因爲這是另一個開發人員尋找它的地方。先做所有你想做的事情,然後把它推出來阻止事件冒起來。

最後,變量名稱的$前綴是什麼?您可能希望將這種做法保存爲PHP,因爲$現在是jquery的句柄。

$(document).ready(function() { 
    $("a[target='popup']").click(function(event) { 
     var myObject = $(this); 
     var href = myObject.attr("href"); 
     var name = myObject.attr("target"); 
     var config = "width=590, height=590, top=20, left=60, scrollbars=1"; 
     var popup = window.open(href, name, config); 

     if (window.focus) { 
       popup.focus(); 
     } 
     event.preventDefault(); 
    }); 
}); 
+0

@索尼:非常感謝! $變量的前綴幫助我記住我正在使用我的函數中定義的JS變量。如果它沒有造成任何傷害,我可能會堅持下去,除非有相反的理由。 – Jeff

0

window.focus

發出請求以使窗口 前面。由於用戶 設置可能會失敗,並且在此 方法返回之前,保證窗口不是 是最前面的。

event.preventDefault()

取消事件,如果它是取消, 而不停止事件的進一步傳播 。

我不認爲如果你在上面給出焦點方法,將會有任何區別。

1

您的JavaScript函數無誤。這裏是每個問題的解釋:

1)我應該使用這個。HREF?
不,你不應該因爲那不是jquery做事情的方式。 Javascript實現可能因瀏覽器而異,這個jQuery函數將確保調用在每個支持的瀏覽器中返回正確的值。雖然這個.href可能有效,但不能保證,但jQuery可以工作(在它打算支持的瀏覽器中)。

2)窗口名稱是否重要?
是的。使用這個jQuery腳本的目的是控制出現的窗口,但是,即使用戶禁用了JavaScript,鏈接也應該工作(以命名窗口爲目標)。這個javascript旨在讓你控制窗口的外觀。

3)這是必要的嗎?
是的,這可以追溯到你不能保證支持某些JavaScript功能。對window.focus的調用只是檢查此瀏覽器中是否存在此元素的焦點函數。如果它確實存在,它將嘗試將焦點設置爲該元素,如果它不存在,它將不會在瀏覽器中顯示爲腳本錯誤(糟糕的用戶體驗)。

4)這應該在$ popup.focus()之上嗎?
這讓瀏覽器知道您已成功創建並自行彈出窗口,並且事件應該停止工作(從而取消打開新窗口的瀏覽器默認事件)。