我正为webtrees制作自定义主题。 webtrees使用了很多弹出窗口,我想用jquery对话框替换它们,但我不想搞乱核心代码。因此jquery脚本必须覆盖原始函数和onclick事件。我在互联网上搜索过但没有找到解决方案。希望你们中的一些人可以帮助我。
这是我要覆盖的功能之一:
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 :(得分:0)
尝试这样的事情: http://jsfiddle.net/sottenad/b2JY9/
您应该能够使用$ .ajax调用替换window.open调用,然后检测对话框以显示您获取的内容。然后打开对话框,或者如果已经打开,只需替换现有内容。
注意:小提琴不会执行,但更容易阅读那里的代码。
答案 1 :(得分: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');
});
它正在工作,但它也刷新了主页,我希望它的行为方式与对话框右上角的默认关闭按钮相同,因此无需刷新页面。我怎么能这样做?
页脚中的第二个链接是指向另一个(常规)页面的链接。单击此链接时,我想关闭当前对话框并使用新页面的内容打开一个新对话框。那可能吗?如果是这样,我怎么能这样做。