0

我正在使用 ArcGIS javaScript 3.5,我想实现打印地图。我知道它是一个内置工具,我们也可以使用该服务,但我的问题是一键实现所有三个步骤(打印、打印、打印输出) (更喜欢其他点击)。

为此,我做了类似的事情——

首先我在设计级别添加了一个 div 并将可见性设置为 false

   <div id="print_button" style="visibility:hidden;display:none;"></div>

在初始化中我使用 esri.dijit.Print 选项

        var app = {};
        app.webmapId = "8315cf7d20f0484e869c4791f70f4f15";
        app.printUrl = "abc/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task";

        var layouts = [{
            "name": "Letter ANSI A Landscape",
            "label": "Landscape (PDF)",
            "format": "pdf",
            "options": {
                "legendLayers": [], // empty array means no legend
                "scalebarUnit": "Miles",
                "titleText": "Map"
            }
        }];
        var templates = [];
        dojo.forEach(layouts, function (lo) {
            var t = new esri.tasks.PrintTemplate();
            t.layout = lo.name;
            t.label = lo.label;
            t.format = lo.format;
            t.layoutOptions = lo.options
            templates.push(t);
        });


        app.printer = new esri.dijit.Print({
            "map": map,
            "templates": templates,
            url: app.printUrl,
        }, dojo.byId("print_button"));
        app.printer.startup();

在我的内部点击中,我想点击这个打印按钮

function export1() { 
        document.getElementById('print_button').click();//This is not working obviously this is not a button        
        return false;
    }

我怎样才能做到这一点。请帮我。


在 Anyalysis 这个 div 之后我发现了这些元素

<div class="esriPrint">
<span class="dijit dijitReset dijitInline dijitButton esriPrintButton dijitButtonDisabled dijitDisabled" 
    role="presentation" widgetId="dijit_form_Button_0">
    <span class="dijitReset dijitInline dijitButtonNode" role="presentation" data-dojo-attach-event="ondijitclick:_onClick">
        <span disabled="" class="dijitReset dijitStretch dijitButtonContents" id="dijit_form_Button_0" role="button" aria-disabled="true" 
          aria-labelledby="dijit_form_Button_0_label" style="-ms-user-select: none;" data-dojo-attach-point="titleNode,focusNode">
            <span class="dijitReset dijitInline dijitIcon dijitNoIcon" data-dojo-attach-point="iconNode">
            </span>

            <span class="dijitReset dijitToggleButtonIconChar">
            ●
            </span>

            <span class="dijitReset dijitInline dijitButtonText" id="dijit_form_Button_0_label" data-dojo-attach-point="containerNode">
            Printing
            </span>
        </span>
    </span>
    <input tabindex="-1" disabled="" class="dijitOffScreen" role="presentation" type="button" value="" data-dojo-attach-point="valueNode">
</span></div>


<div class="esriPrint">
<span class="dijit dijitReset dijitInline dijitButton esriPrintButton" role="presentation" widgetId="dijit_form_Button_1">
    <span class="dijitReset dijitInline dijitButtonNode" role="presentation" data-dojo-attach-event="ondijitclick:_onClick">
        <span tabindex="0" class="dijitReset dijitStretch dijitButtonContents" id="dijit_form_Button_1" 
        role="button" aria-labelledby="dijit_form_Button_1_label" style="-ms-user-select: none;" data-dojo-attach-point="titleNode,focusNode">

            <span class="dijitReset dijitInline dijitIcon dijitNoIcon" data-dojo-attach-point="iconNode">
            </span>
            <span class="dijitReset dijitToggleButtonIconChar">
            ●
            </span>
            <span class="dijitReset dijitInline dijitButtonText" id="dijit_form_Button_1_label" data-dojo-attach-point="containerNode">
            Print
            </span>
        </span>
    </span>
<input tabindex="-1" class="dijitOffScreen" role="presentation" type="button" value="" data-dojo-attach-point="valueNode">
</span></div>

但是我怎么能调用这个点击事件,因为它很容易找到元素但是调用点击事件并不简单,或者我不知道如何调用 data-dojo-attach-event="ondijitclick:_onClick" 这个事件?

你能建议我如何称呼这个活动吗?

4

1 回答 1

1

虽然这不是一个完整的答案,但我认为你.click()失败的原因是因为你“点击”了错误的东西。在我的地图的源代码中,我所拥有的是:

<div id="printButton"></div>

但在运行时 Dojo 将其扩展为:

<div id="printButton">
  <div class="esriPrint">
    <span class="dijit dijitReset dijitInline esriPrintButton dijitButton" role="presentation" widgetid="dijit_form_Button_0">
      <span class="dijitReset dijitInline dijitButtonNode" data-dojo-attach-event="ondijitclick:_onClick" role="presentation">
...etc

并注意data-dojo-attach-event第二个标签上的<span>标签。我会寻找该<span>标签并查看您是否可以在其上引发点击事件。


编辑:

是的,.click()正确的元素确实会触发打印任务,我刚刚在自己的应用程序中尝试过。我广泛使用 jQuery,所以我使用选择器来查找属于以下子#printButton .dijitInline类的任何元素:.dijitInline<div id="printButton">

$('#printButton .dijitInline').click();

...这就像我用鼠标单击按钮一样触发了打印任务。您应该能够使用dojo 等效项找到正确的元素并单击它。

于 2013-06-20T05:25:10.910 回答