2012-01-04 112 views
0

我正在爲webtrees製作自定義主題。 webtrees使用了很多彈出窗口,我想用jquery對話框替換它們,但是我不想弄亂核心代碼。所以jquery腳本必須重寫原始函數和onclick事件。我在互聯網上搜索過,但沒有找到解決方案。希望你們中的一些人能幫助我。用jQuery對話框替換javascript彈出窗口

這是我要重寫的功能之一:

var helpWin; 
function helpPopup(which, mod) { 
    if (which==null) which = "help_contents_help"; 
    if (mod!='') which=which+'&mod='+mod; 
    if ((!helpWin)||(helpWin.closed)) { 
     helpWin = window.open('help_text.php?help='+which,'_blank','left=50,top=50,width=500,height=320,resizable=1,scrollbars=1'); 
    } else { 
     helpWin.location = 'help_text.php?help='+which; 
    } 
    return false; 
} 
function closeHelp() { 
    if (helpWin) helpWin.close(); 
} 

的HTML看起來是這樣的:

<a class="help" onclick="helpPopup('index_charts','charts'); return false;" href="#"> 

我嘗試了jQuery的對話框幾個jQuery的解決方案,但沒有一次成功。

任何解決方案?

+0

你是否收到任何JS錯誤?我想你應該,因爲你需要在引號中點擊'',像這樣:''點擊'' – 2012-01-04 22:46:15

+0

不,我沒有得到任何錯誤。這不是我的功能,而是我試圖覆蓋的webtrees的核心功能。我只是給這個函數來明確什麼是當前的彈出功能,但我想用jquery對話框替換它。 – JustCarmen 2012-01-04 22:57:59

回答

0

嘗試是這樣的: http://jsfiddle.net/sottenad/b2JY9/

你應該能夠取代$就調用window.open電話,然後下探對話框顯示你回來的內容。然後打開對話框,或者如果它已經打開,只需替換現有的內容。

注:小提琴不會執行,但它更容易閱讀代碼。

0

首先,我不是jQuery的專家,所以也許事情可以做得更好,但我設法從原始的onclick事件中檢索對話框。這是使事情發生的代碼:

$('a.help').livequery(function(){ 
     var cl = $(this).attr('onclick'); 
     var str = cl.split("('").pop().split("')").shift(); 
     var arr = str.split("','");  
     if (arr[1] == '') { 
      qvar = arr[0]; 
     } 
     else { 
      qvar = arr[0]+'&mod='+arr[1]; 
     }  
     $(this).removeAttr('onclick'); 
     $(this).attr('href', 'help_text.php?help='+qvar); 

     var $link = $(this);   
     var $dialog = $('<div id="help-dialog"></div>') 
      .load($link.attr('href')) 
      .dialog({ 
       autoOpen: false,     
       width: 500, 
       modal: true   
      }); 

     $link.click(function() { 
      var htitle = $dialog.find('.helpheader'); 
      htitle.hide(); 
      $dialog.dialog('option', 'title', htitle.text()); 
      $dialog.find('.helpfooter').remove(); 
      $dialog.dialog('open'); 
      return false; 
     }); 
    }); 

首先,我從onclick值做了一個鏈接,並將其放入href屬性中。這樣我可以將href鏈接中的頁面內容放入對話框中。

有一件事,我無法去工作。在對話內容中,在頁腳中有兩個鏈接。目前我只是刪除了頁腳的內容,但這不是我最終想要的。

一個鏈接是一個緊密的鏈接。我試圖把它與此代碼的工作:

$dialog.find('.helpfooter a[onclick*="close"]'); 
closelink.removeAttr('onclick'); 
closelink.click(function() { 
    $dialog.dialog('close'); 
}); 

這是工作,但它也刷新炫魅,我想它在相同的方式,在該對話框的topright角落默認closebutton的行爲,所以不刷新頁面。我怎樣才能做到這一點?

頁腳中的第二個鏈接是指向另一個(常規)頁面的鏈接。點擊此鏈接時,我想關閉當前對話框並用新頁面的內容打開一個新鏈接。那可能嗎?如果是這樣,我該怎麼做。