【问题标题】:JavaScript dialog returnJavaScript 对话框返回
【发布时间】:2011-01-22 11:37:11
【问题描述】:

我有一个绘制对话框的 JavaScript 函数。我想让它返回用户指定的值。问题是,当用户单击两个按钮时关闭对话框,这两个按钮分配了onClick 事件。我知道获取这些事件的唯一方法是为它们分配函数,这意味着返回会导致分配的函数返回,而不是我的 inputDialog 函数。我确定我只是在以一种愚蠢的方式这样做。

如果您想知道,此脚本使用 Adob​​e 的 ExtendScript API 来扩展 After Effects。

代码如下:

function inputDialog (queryString, title){
    // Create a window of type dialog.
    var dia = new Window("dialog", title, [100,100,330,200]);  // bounds = [left, top, right, bottom]
    this.windowRef = dia;

    // Add the components, a label, two buttons and input
    dia.label = dia.add("statictext", [20, 10, 210, 30]);
    dia.label.text = queryString;
    dia.input = dia.add("edittext", [20, 30, 210, 50]);
    dia.input.textselection = "New Selection";
    dia.input.active = true;
    dia.okBtn = dia.add("button", [20,65,105,85], "OK");
    dia.cancelBtn = dia.add("button", [120, 65, 210, 85], "Cancel");


    // Register event listeners that define the button behavior

    //user clicked OK
    dia.okBtn.onClick = function() {
        if(dia.input.text != "") { //check that the text input wasn't empty
            var result = dia.input.text;
            dia.close(); //close the window
            if(debug) alert(result);
            return result;
        } else { //the text box is blank
            alert("Please enter a value."); //don't close the window, ask the user to enter something
        }
    };

    //user clicked Cancel
    dia.cancelBtn.onClick = function() {
        dia.close();
        if(debug) alert("dialog cancelled");
        return false;
    };

    // Display the window
    dia.show();

}

【问题讨论】:

    标签: javascript function return-value extendscript adobe-scriptui


    【解决方案1】:

    我想出了一个解决方案。这真的很难看,但它会让我暂时渡过难关......谁有更好的解决方案?

        var ret = null;
    
        // Register event listeners that define the button behavior
        dia.okBtn.onClick = function() {
            if(dia.input.text != "") { //check that the text input wasn't empty
                var result = dia.input.text;
                dia.close(); //close the window
                if(debug) alert(result);
                ret = result;
                return result;
            } else { //the text box is blank
                alert("Please enter a value."); //don't close the window, ask the user to enter something
            }
        };
    
        dia.cancelBtn.onClick = function() { //user cancelled action
            dia.close();
            ret = false;
            return false;
        };
    
        // Display the window
        dia.show();
    
        while(ret == null){};
        return ret;
    

    【讨论】:

      【解决方案2】:

      使用特定整数关闭对话框可能会稍微好一些。然后您可以检查来自show() 的返回值并返回适当的值。请参阅 jongware 对ExtendScript ScriptUI Window's close method 的引用。

      // Register event listeners that define the button behavior
      dia.okBtn.onClick = function() {
          if(dia.input.text != "") { //check that the text input wasn't empty
              dia.close(1); //close the window
          } else { //the text box is blank
              alert("Please enter a value."); //don't close the window, ask the user to enter something
          }
      };
      
      dia.cancelBtn.onClick = function() { //user cancelled action
          dia.close(2);
      };
      
      
      var buttonCloseValue = dia.show(); //blocks until user interaction
      if(dia.show() == 1) {
          if(debug) alert(dia.input.text);
          return dia.input.text;
      }
      return false;
      

      【讨论】:

        猜你喜欢
        • 2012-05-22
        • 2020-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多