2016-01-21 3 views
0

У меня есть код сценария приложения Google Таблиц, который обращается к API и обновляет поле на боковой панели на основе некоторого ввода пользователя. Все работает так, как ожидалось, за исключением кнопки, используемой для вызова вызова API с боковой панели. По какой-то причине нажатие кнопки открывает новую, пустую вкладку в браузере.GAS - Предотвратить событие нажатия кнопки при открытии новой вкладки браузера

Моя лучшая догадка заключается в том, что я каким-то образом реализую google.script.run.withSuccessHandler(), но я не смог это подтвердить. Любая помощь приветствуется.

Sidebar.html

Это полный файл врезка, что я использую.

<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css"> 
    </head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script> 
     $(function() { 
     $('#narrative-from-selection').click(getNarrative); 
     }); 
     function getNarrative(narrative) { 
     //document.getElementById('narrative-response').innerHTML = narrative.replace(new RegExp('\r?\n','g'), '<br />'); 
     var projectName = $('#project-name').val(); 
     var templateName = $('#template-name').val(); 
     google.script.run 
      .withSuccessHandler(
      function(narrative) { 
       $('#narrative-response').html(narrative); 
      }) 
      .withUserObject(this) 
      .generateContentForSelected(projectName, templateName); 
     } 
    </script> 
    <body> 
    <div> 
    <br /> 
    <br /> 
    <form> 
     Project Name: <input type="text" name="project-name" id="project-name" onchange="google.script.run.updateProjectAndTemplateNames(this.parentNode)"><br /> 
     Template Name: <input type="text" name="template-name" id="template-name" onchange="google.script.run.updateProjectAndTemplateNames(this.parentNode)"><br /> 
     <button id="narrative-from-selection">Generate from Selection</button><br /><br /> 
     Response:<br /><br /> 
     <div id="narrative-response"></div> 
    </form> 
    </div> 
    </body> 
</html> 

Code.gs

Вот обзор соответствующей функции, которые я использую (инфо используется ударить API удаляется, но я проверил, что штучные много раз, и он возвращается в точности что я ожидаю, что он отправит обратно).

function generateContentForSelected(projectName, templateName) { 
    // go do some API magic here 
    var narrative = "This is a test string."; 
    return narrative; 
} 

ответ

0

Через тонны проб и ошибок, я понял, что вызывает вопрос, хотя я до сих пор не уверен, почему это вызывает новая вкладка, чтобы открыть. По-видимому, что-то о том, как скрипт приложения делает асинхронный вызов с использованием формы, немного причудливо. Я снял теги <form> и </form> из файла Sidebar.html, и все работает так, как ожидалось.

Если есть лучший способ исправить это, или если я с самого начала все это неправильно, мне было бы интересно узнать, как структурировать это более эффективно. Но, по крайней мере, я работал.

Смежные вопросы