2011-04-28 41 views
0

我正在使用jQuery對話框插件。jQuery對話框調用重定向頁面

對話框的div設置(但不打開),在頁面加載:

$(document).ready(function(){ 
    $('#foo').dialog({autoOpen:false}); 
}); 

然後一個超級鏈接應該打開的對話框:

<a href="javascript:$('#foo').dialog('open');">Show dialogue box</a> 

但這打開的對話框中再小部分稍後重定向到網址javascript:$('#foo').dialog('open');

我試圖返回false:

<a href="javascript:$('#foo').dialog('open');return false;">Show dialogue box</a> 

但是當我點擊它的鏈接根本不會迴應。

我知道這必須是JavaScript的臭名昭着的微妙之處,但我不能解決它。

任何人都可以幫忙嗎?

+0

你可以提供一個鏈接到你使用的插件,因爲我想有很多。 – 2011-04-28 09:32:42

+0

@Robert:99.9%它是jQuery UI的對話框:http://jqueryui.com – 2011-04-28 09:33:52

回答

0

然後一個超級鏈接應該打開的對話框:

<a href="javascript:$('#foo').dialog('open');">Show dialogue box</a>

但這打開的對話框中,然後一小部分後重定向到的URL JavaScript的網頁:$( '#foo')。對話框( '開放');!

這應該不會發生。僞協議javascript:不涉及頁面加載,當然也不通過HTTP。我不推薦它(我會使用jQuery的click處理程序),但它應該可以工作。

我試圖返回false: ... 但是當我點擊它的鏈接根本不會迴應。

不應該發生。

您引用的代碼很好(在這裏有效,例如:http://jsbin.com/inixa5),所以問題必須出現在頁面的其他部分。

更新:好吧,這很奇怪,IE6和IE7不喜歡那樣;我認爲這是因爲dialog返回一個值。你可以避開,要麼通過包裝您的通話的功能,打開對話框並沒有明確返回任何東西:

<a href="javascript:showDialog('#foo');">Click Me</a> 
<script> 
    $("#foo").dialog({autoOpen: false}); 
    function showDialog(selector) { 
    $(selector).dialog('open'); 
    } 
</script> 

或(這是大型哈克)通過確保在最後一個表達式javascript:undefined:使用

<a href="javascript:$('#foo').dialog('open');undefined;">Click Me</a> 
<script> 
    $("#foo").dialog({autoOpen: false}); 
</script> 

或者通過onclick

<a href="#" onclick="$('#foo').dialog('open'); return false;">Click Me</a> 
<script> 
    $("#foo").dialog({autoOpen: false}); 
</script> 

但在任何情況下,強烈建議掛鉤次與DOM2風格的事件處理程序INGS起來:

<a href="#" name='openSesame'>Click Me</a> 
<script> 
    // This _can_ be immediately after the anchor, but I'd put it in 
    // a separate, since .js file for the page that you load just before 
    // the closing body tag. 
    $("#foo").dialog({autoOpen: false}); 
    $("a[name=openSesame]").click(function() { 
    $("#foo").dialog('open'); 
    return false; 
    }); 
</script> 

Live example(當然,你可以使用任何有意義的選擇,你不必給錨name [或id]。)

其中一件好事就是,如果JavaScript被禁用(有些稱爲progressive enhancement),那麼您可以讓用戶把用戶帶到有意義和/或有用的地方。

+0

長期來說,無論如何,我可能會做到這一點不顯眼,我只是測試對話框插件,並感到困惑,它沒有按預期工作。感謝您的詳細解答。 – David 2011-04-28 10:34:38

+0

@David:不用擔心,很高興幫助。 – 2011-04-28 10:38:06

+0

如果你不介意我說,你的網站看起來在FF3.6中被打破了...... – David 2011-04-28 15:59:33

0

鏈接更改爲:

<a href="javascript:void(0)" onclick="$('#foo').dialog('open')"> 
    Show dialogue box 
</a> 

最好避免將的javascript在href。 更好的是給它一個類,並通過jQuery添加一個點擊事件。

+0

感謝您的支持。 – David 2011-04-28 10:35:47