从 SuiteScript 的下拉菜单中选择一个选项后,如何使文本框出现?
How do I make a text box appear after selecting an option from a drop-down menu in SuiteScript?
我是 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);
}
我希望在用户选择选项 "Other" 时显示文本框。因此在本例中,代码行 selectField.addSelectOption(other, other, false);
表示标记为 "Other" 的选择选项。此选择发生在用户单击提交按钮之前,因此我认为此时不会发生任何 POST 请求。
我不确定每当用户从下拉菜单中选择一个选项时会触发哪种事件。如果我可以通过我的代码捕获该事件,那么我希望我应该能够根据选择显示一个文本框。
编辑:我忘了提一件事。我根本不处理记录。这只是一个Suitelet生成的纯形式。
使用客户端脚本,您可以隐藏和显示 Suitelet 表单中的字段。因此,创建一个字段并仅使用客户端脚本或 suitelet (setdisplaytype) 隐藏该字段。
在客户端脚本中,您可以定义字段更改功能,如果选项是其他选项,则显示文本字段。
我正在为函数添加一些参考代码片段
用于在 suitelet 中设置客户端脚本
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();
}
}
}
您需要将客户端脚本关联到您的 Suitelet。然后使用字段更改功能来捕获用户 select 从下拉列表中选择一个选项时的事件。在 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');
}
}
}
我是 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);
}
我希望在用户选择选项 "Other" 时显示文本框。因此在本例中,代码行 selectField.addSelectOption(other, other, false);
表示标记为 "Other" 的选择选项。此选择发生在用户单击提交按钮之前,因此我认为此时不会发生任何 POST 请求。
我不确定每当用户从下拉菜单中选择一个选项时会触发哪种事件。如果我可以通过我的代码捕获该事件,那么我希望我应该能够根据选择显示一个文本框。
编辑:我忘了提一件事。我根本不处理记录。这只是一个Suitelet生成的纯形式。
使用客户端脚本,您可以隐藏和显示 Suitelet 表单中的字段。因此,创建一个字段并仅使用客户端脚本或 suitelet (setdisplaytype) 隐藏该字段。
在客户端脚本中,您可以定义字段更改功能,如果选项是其他选项,则显示文本字段。
我正在为函数添加一些参考代码片段
用于在 suitelet 中设置客户端脚本
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();
}
}
}
您需要将客户端脚本关联到您的 Suitelet。然后使用字段更改功能来捕获用户 select 从下拉列表中选择一个选项时的事件。在 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');
}
}
}