【问题标题】:How do I make a text box appear after selecting an option from a drop-down menu in SuiteScript?从 SuiteScript 的下拉菜单中选择一个选项后,如何使文本框出现?
【发布时间】:2019-02-08 02:18:14
【问题描述】:

我是 SuiteScript 的新手。现在我正在尝试使用 Suitelet 制作表格。在这种形式中,我想向 Suitelet 添加逻辑,如果用户从下拉菜单中选择一个选项,则该选项将显示一个文本框,供用户在该选择中输入更多详细信息。到目前为止,这是我的代码。

function suitelet(request, response) {

    //create form
    var form = nlapiCreateForm('Form Title');

    var a = 'a';
    var b = 'b';
    var other = 'Other';

    // adds dropdown menu
    var selectField = form.addField('custpage_menu', 'select', 'Random Dropdown Menu');
    selectField.addSelectOption('', '', false);
    selectField.addSelectOption(a, a, false);
    selectField.addSelectOption(b, b, false);
    selectField.addSelectOption(other, other, false);
    selectField.setMandatory(true);

    //render a button for the user to submit form
    form.addSubmitButton('Submit');

    //load form
    response.writePage(form);
}

我希望在用户选择“其他”选项时显示文本框。所以在这种情况下,代码行selectField.addSelectOption(other, other, false); 表示标记为“其他”的选择选项。此选择发生在用户单击提交按钮之前,因此我认为此时不会发生任何 POST 请求。

我不确定当用户从下拉菜单中选择一个选项时会触发什么样的事件。如果我可以通过我的代码捕获该事件,那么我希望我应该能够根据选择显示一个文本框。

编辑:我忘了提一件事。我根本不处理记录。这只是一个由 Suitelet 生成的纯表单。

【问题讨论】:

    标签: javascript drop-down-menu netsuite suitescript


    【解决方案1】:

    您需要将客户端脚本关联到您的 Suitelet。然后使用字段更改功能来捕获用户从下拉列表中选择选项时的事件。在套件上创建文本框时必须隐藏文本框,然后在客户端中使用 field.isDisplay 属性,如下所示:

    function fieldChanged(){ 
       if (context.fieldId == 'custpage_menu') {
          var boxField = context.currentRecord.getField('custpage_your_text_box_id');
          if(other was selected){
              boxField.isDisplay = true;
          } else {
              boxField.isDisplay = false;
          }
       } 
    }
    

    我这里加的是1.0的代码,虽然一开始是2.0的,但是做法是一样的,我还是留下2.0的版本,以防对别人有用:

    function clientFieldChanged(type, name, linenum){
       if(name == 'custpage_menu') {
          var optionSelected = nlapiGetFieldValue('custpage_menu');
          if(other was selected){
             nlapiGetField('custpage_your_text_box_id').setDisplayType('normal');
          } else{
             nlapiGetField('custpage_your_text_box_id').setDisplayType('hidden');
          }
       }
    }
    

    【讨论】:

    • 谢谢。不幸的是我忘了提到我的代码只是一个由 Suitelet 生成的表单,所以我不处理记录。
    • Thomas93,我想您可能不知道您可以在与套件脚本关联的客户端脚本中使用 currentRecord。这个解决方案有效,我已经测试过了。您不需要将此客户端脚本部署到任何记录,只需添加以下行:form.clientScriptFileId = 'client_script_file_id'。
    • 我知道我可以使用与套件关联的未部署客户端脚本。但是,如果该 Suitelet 不适用于任何记录,那么我不明白 currentRecord 在这种情况下如何仍然可以使用。 Suitelet 生成的表单不是可以保存到 Netsuite 数据库的记录。另外,我正在使用 SuiteScript 1.0 进行编码。我不确定 2.0 是否有任何不同。
    • thomas93,见上面我更新的回复。我不确定您对无法保存的记录是什么意思。如果您有一个套件,它会创建一个显示在 UI 中的表单,然后您在文件柜中使用我上面的代码创建一个简单文件,然后将其关联到套件,代码将隐藏并显示所需的字段。
    • 乐于助人。您也应该尝试在 2.0 中测试我的代码。 currentRecord 是您在 2.0 中在客户端脚本中获取表单和字段的方式,即使您使用的是套件而不是记录本身。
    【解决方案2】:

    使用客户端脚本,您可以隐藏和显示 Suitelet 表单中的字段。因此,仅使用客户端脚本或套件 (setdisplaytype) 创建一个字段并隐藏该字段。

    在客户端脚本中,您可以定义字段更改功能,如果选项是其他选项,则显示文本字段。

    我正在为函数添加一些参考代码sn-ps

    用于在套件中设置客户端脚本

    form.clientScriptFileId = '264221';
    

    用于客户端的字段更改

      /*Field Change event*/
                   function fieldChanged(scriptContext) {
                        var records = scriptContext.currentRecord;
                        if (scriptContext.fieldId == "datefiltertype") {
                            var type = records.getValue({
                                fieldId: 'datefiltertype'
                            });
    
                            if (type == "NOTWITHIN" || type == "WITHIN") {
                                jQuery("#fromdate_fs_lbl_uir_label").html("To");
                                jQuery("#todate_fs_lbl_uir_label").html("From");
                                jQuery("#fromdate_fs_lbl_uir_label").show();
                                jQuery("#fromdate").show()
                            } else {
                                jQuery("#fromdate").val("");
                                jQuery("#fromdate_fs_lbl_uir_label").hide();
                                jQuery("#fromdate").hide();
                            }
                        }
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-30
      • 2019-05-05
      • 2015-07-27
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      相关资源
      最近更新 更多