我在母版页中添加了以下代码。我能够获得alert("I am in onload Function");
,但是jQuery(“uploadPic”)。对话框无效。页面上显示<div>
部分。
我正在使用jQuery的引用
<script type=text/javascript src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.4.min.js"></script>
我也试过了$('#uploadPic').dialog
。但是没有用。
<script language="javascript" type="text/javascript">
_spBodyOnLoadFunctionNames.push("onloadFunction");
function onloadFunction() {
alert("I am in onload Function");
//setup edit person dialog
jQuery("uploadPic").dialog({
autoOpen: false,
modal: true,
height: 375,
width: 400,
draggable: true,
title: "Upload Picture",
open: function (type, data) {
$(this).parent().appendTo("form");
}
});
}
function showDialog(id) {
alert("Hi");
$('#' + id).dialog("open");
alert("End");
}
</script>
<map name="Map">
<area shape="rect" coords="225,16,287,33" href="/_layouts/MyAlerts.aspx" onclick="javascript:showDialog('uploadPic');" alt="My Alerts">
</map>
<div id='uploadPic'>
<table class="ms-authoringcontrols" style="border-top:1px black solid; border:1px black solid; height:70px " >
<tbody>
<tr>
<td class="ms-sectionheader ms-rightAlign">
Please choose a picture to upload to your picture library.
</td>
</tr>
</tbody>
</table>
</div>
答案 0 :(得分:3)
你提到你已经包含了jQuery,但你是否也包含了jQuery UI来访问.dialog()函数?
答案 1 :(得分:3)
您没有添加对jquery ui的引用:
<script type=text/javascript src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.9/jquery-ui.js"></script>
行
jQuery("uploadPic").dialog({
应该是
jQuery("#uploadPic").dialog({
因为你的目标是一个带有id的div。
答案 2 :(得分:2)
除了在<script>
元素中没有引用jQuery之外,还没有在<script>
元素中引用jQuery UI,而没有链接到<link>
元素中的某个jQuery UI css,以及在按#
选择时不使用octothorpe jQuery("#uploadPic)
,您也永远不会调用showDialog(...)
函数:
function showDialog(id) {
alert("Hi");
$('#' + id).dialog("open");
alert("End");
}
由于您在调用autoOpen: false
...
dialog({...})
jQuery("uploadPic").dialog({
autoOpen: false, // <---
modal: true,
height: 375,
width: 400,
draggable: true,
title: "Upload Picture",
open: function (type, data) {
$(this).parent().appendTo("form");
}
});
......首先看不到对话框。您必须拨打open(...)
或dialog("open")
- 就像您在showDialog(...)
功能中所做的那样。
但是因为你从不调用那个函数,所以它永远不会打开对话框。
试试这个:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Jquery dialog not working in masterpage?</title>
<script type=text/javascript src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type=text/javascript src="https://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.9/jquery-ui.js"></script>
<link type="text/css" rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.0/themes/base/jquery-ui.css" />
<script language="javascript" type="text/javascript">
// _spBodyOnLoadFunctionNames.push("onloadFunction"); // since I'm not using SharePoint I have replaced this line with jQuery(document).ready(...) below
function onloadFunction() {
alert("I am in onload Function");
//setup edit person dialog
jQuery("#uploadPic").dialog({
autoOpen: false,
modal: true,
height: 375,
width: 400,
draggable: true,
title: "Upload Picture",
open: function (type, data) {
$(this).parent().appendTo("form");
}
});
jQuery("#open-button").click(function() {
showDialog("uploadPic");
});
}
function showDialog(id) {
alert("Hi");
$('#' + id).dialog("open");
alert("End");
}
$(document).ready(onloadFunction);
</script>
</head>
<body>
<a id="open-button" style="cursor:pointer;">Open the dialog</a>
<div id='uploadPic'>
<table class="ms-authoringcontrols" style="border-top:1px black solid; border:1px black solid; height:70px " >
<tbody>
<tr>
<td class="ms-sectionheader ms-rightAlign">
Please choose a picture to upload to your picture library.
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
答案 3 :(得分:1)
我认为你当前的问题是,当你创建对话框时,你的选择器顶部的unloadPic前面没有#。它不知道你要选择什么,因此永远不会创建对话框。
另外,如果您使用的是jQuery,为什么不使用jQuery为dialog()
附加点击处理程序?
<map name="Map">
<area id="myAlerts"
shape="rect"
coords="225,16,287,33"
href="/_layouts/MyAlerts.aspx"
alt="My Alerts" />
</map>
请注意,要area
代码,您需要添加id
,并在/
前添加>
以正确关闭代码,你没有。
这是我使用的,我已经为你的例子修改了它:
(function($, window, document, undefined) {
// grab dialog and area
var $dialog = $("#uploadPic"),
$myAlerts = $("#myAlerts");
// attach click handler
$myAlerts.click(function(e) {
// prevent default click action
e.preventDefault();
// if dialog exists, unbind and open
if ($dialog.length) $dialog.unbind().dialog('open');
});
// added to re-center dialog when window re-sizes
$(window).resize(function() {
if ($dialog.length && $dialog.dialog('isOpen'))
$dialog.dialog('option', 'position', 'center');
});
})(jQuery, this, document);
修改强>
我还要补充一点,因为您使用的是MasterPages,我肯定会确保您通过以下方式添加onLoadFunction()
:
if (Sys != undefined && Sys.Application) {
// add to Application object
Sys.Application.add_load(onLoadFunction);
} else {
// fall back to adding to window.onload
window.onload = onLoadFunction();
}
我看到_spBodyOnLoadFunctionNames.push("onloadFunction");
,但我不确定究竟是做什么的。我认为它会做它应该做的事情。
答案 4 :(得分:-1)
这是一篇在asp.net母版页中使用jQuery对话框的有趣文章。
http://deepasp.wordpress.com/2013/05/31/jquery-dialog-in-asp-net-master-page/