Jquery对话框在母版页中不起作用?

时间:2011-04-07 15:45:18

标签: jquery asp.net updatepanel master-pages updateprogress

我在母版页中添加了以下代码。我能够获得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>

5 个答案:

答案 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/