无法在GAS中使用JQuery从脚本中调用脚本

时间:2015-07-06 22:21:49

标签: javascript jquery google-apps-script google-apps

我在执行脚本时遇到了一些困难。我是HTML和JQuery的新手。

使用Google表格和Google Apps脚本:

我有3个问题的文件:

'sidebar.html'
'popup.html'
'scriptsJS.html'

两个'侧边栏的脚本'和' popup'都在' scriptsJS'。

按钮"#btnRefreshData"被绑定到侧边栏中的按钮&#39 ;;此按钮和相关脚本按预期工作。

我试图从另一个绑定到' popup.html'中的不同buttin的脚本触发相同的按钮,但该调用被忽略。

以下脚本位于' scriptsJS.html'中,并且绑定到' popup.html'中的按钮:

$( '#btnOpenSelectedItem' ).click(function() {

    this.disabled = true;
    var item = $( "#resultsList" ).find(':selected').val();  

    google.script.run
        .withSuccessHandler(
          function(msg, element) {
            element.disabled = false;
            doThis(); 
            google.script.host.close();
            })   

        .withFailureHandler(
          function(msg, element) {
            showStatus(msg, 'error');
            element.disabled = false;
          })

        .withUserObject(this)

        .openSelectedItem(item);
  });

上面的脚本正确执行;我的数据加载,然后调用' doThis':

function doThis () {
     alert ('do this called');
     $( "#btnRefreshData" ).trigger( "click" );  //<-- ignored
};

上面的脚本成功显示警报(用于测试),然后尝试触发#btnRefreshData。 #btnRefreshData绑定到&#39; sidebar.html&#39;,并导致侧边栏中的数据重新填充。

同样,所有这些脚本都在同一个文件中,但当我从&#39; popup.html&#39;中调用#btnRefreshData(绑定到&#39; sidebar.html)时,它会被忽略。

我希望找到触发此事件的方法。谢谢你能给我的任何帮助。

2 个答案:

答案 0 :(得分:0)

我猜这是一个事件委托问题,你如何绑定#btnRefreshData的点击处理程序?如果您没有委托它,请尝试按如下方式委派它:

 $( "#btnRefreshData" ).on( "click", function() {} ); //My guess on how you are binding it.

 $( document ).on( "click", "#btnRefreshData", function() {} ); //Delegating the event.

答案 1 :(得分:0)

Apps脚本使用caja编译代码。对于设计,您可以在普通javascript上获得的一些选项被禁用,并且以编程方式触发单击是其中之一。这就是您提到的代码被忽略的原因。 在这种情况下,最好调用单击按钮时执行的方法&#34;#btnRefreshData&#34;在你的doThis方法里面。

您可以在此处找到一些解释:https://code.google.com/p/google-caja/issues/detail?id=1404 https://developers.google.com/apps-script/guides/html/restrictions#restrictions_in_native_and_emulated_mode