3

我在母版页中添加了以下代码。我能够得到alert("I am in onload Function");,但 jQuery("uploadPic").dialog 不起作用。页面上显示的<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>
4

5 回答 5

3

您提到您已经包含了 jQuery,但您是否还包含了 jQuery UI 以访问 .dialog() 函数?

于 2011-04-07T15:54:27.617 回答
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 时。

于 2011-04-07T15:56:16.153 回答
2

除了在元素中不引用 jQuery,在<script>元素中不引用 jQuery UI,在<script>元素中不链接到某些 jQuery UI css ,并且在通过 id 选择时<link>不使用 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(...)or 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>
于 2011-04-07T18:41:20.027 回答
1

我认为您的直接问题是,当您创建对话框时,您的选择器顶部的 unloadPic 前面没有 # 。它不知道您要选择什么,因此永远不会创建对话框。

另外,如果您使用的是 jQuery,为什么不为您dialog()使用的 jQuery 附加一个点击处理程序呢?

<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()via:

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");,但我不确定它到底是做什么的。我会假设它会做它应该做的事情。

于 2011-04-07T16:26:26.190 回答
-1

这是一篇在 asp.net 母版页中使用 jQuery 对话框的有趣文章。

http://deepasp.wordpress.com/2013/05/31/jquery-dialog-in-asp-net-master-page/
于 2013-05-31T13:26:57.693 回答