2012-01-04 105 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的行为,所以不刷新页面。我怎样才能做到这一点?

页脚中的第二个链接是指向另一个(常规)页面的链接。点击此链接时,我想关闭当前对话框并用新页面的内容打开一个新链接。那可能吗?如果是这样,我该怎么做。