Jquery диалог не работает на главной странице? - PullRequest
3 голосов
/ 07 апреля 2011

Я добавил ниже код на главной странице. Я могу получить 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 ]

3 голосов
/ 07 апреля 2011

Вы не добавили ссылку на 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({

когда вы выбираете div с идентификатором.

3 голосов
/ 07 апреля 2011

Вы упомянули, что включили jQuery, но также включили ли вы jQuery UI, чтобы получить доступ к функции .dialog ()?

2 голосов
/ 07 апреля 2011

Помимо того, что не ссылаются на jQuery в элементе <script> и не ссылаются на jQuery UI в элементе <script>, не ссылаются на некоторые jQuery UI css в элементе <link> и не используют октофор # при выборе по идентификатору 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>
1 голос
/ 07 апреля 2011

Я думаю, что вашей непосредственной проблемой является то, что у вас нет # перед 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() через:

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");, но я не уверен, что именно это делает.Я бы предположил, что он делает то, что должен.

0 голосов
/ 31 мая 2013

Вот интересная статья, использующая диалог jQuery на главной странице asp.net.

http://deepasp.wordpress.com/2013/05/31/jquery-dialog-in-asp-net-master-page/
...