【问题标题】:using javascript with a string that contains使用带有包含的字符串的 javascript
【发布时间】:2018-03-15 21:32:04
【问题描述】:

您好,我目前正在使用 java 来隐藏表单上的某些选项卡和字段,具体取决于下拉列表的数量,例如,这是一个有效的代码:

//Display Transfer tab if it is a transfer application
var ctrlApplicationType = Runner.getControl(pageid, 'ApplicationType');
ctrlApplicationType.on('change', function(e) 
    {

   if (this.getValue() == 2) 
        {
            var tabs = pageObj.getTabs(); tabs.show(2);
        } 
    else 
        {
            var tabs = pageObj.getTabs(); tabs.hide(2);
        }

    }
);

在上面的示例中,下拉列表是从查找表提供的并返回主键 INT,因此 ==2 可以正常工作。

但是,当我试图让它与复选框一起使用时,我现在遇到了一个问题,因为问题是一个复选框可以有多个选项。

我的复选框查找表有 5 个选项,所以如果我勾选选项 1、2 和 3,则字段(字符串)存储为 1、2、3。

我需要做的是改变上面的代码,如果它包含1则返回true,即

如果 (1,2,3) 包含 1 则为真 如果 (2,3) 包含 1 则为 false。

任何想法将不胜感激

【问题讨论】:

  • 不是 java 而是 javascript
  • 你为什么用 PHP 标记这个?此外,Java != JavaScript
  • 尝试使用 switch 语句
  • 将字符串转为数组,然后查看目标值是否包含在数组中
  • 我从来没有使用过 javascript,所以我会很感激建议的代码?

标签: javascript contains


【解决方案1】:

好吧,根据我更好的判断(我真的很想看到你根据我已经给你的信息做出你自己的尝试),给你...

var selectedString = "1,2,3"; // from your code, this is this.getValue()

var selectedArray = selectedString.split(","); // split the string into an array using a comma (,) as the split point

var foundInArray = selectedArray.includes('1'); // foundInArray is now a boolean indicating whether or not the value '1' is one of the values in the array.

if(foundInArray)
{
    // do the found action
}
else
{
    // do the not found action
}

如果您想与整数值而不是字符串值进行比较,那也很容易。

var integerArray = selectedArray.map(function(x){ return parseInt(x); });

var foundInArray = integerArray.includes(1);

最后,所有这些都可以链接成一条线:

if(selectedString.split(",").map(function(x){return parseInt(x);}).includes(1))
{
    // do found action
}
else
{
    // do not found action
}

要遍历固定列表并显示/隐藏每个列表,您可以这样做...

var possibleTabs = [1,2,3,4,5];

for(n in possibleTabs)
{
    if(selectedString.split(",").map(function(x){return parseInt(x);}).includes(n))
    {
        var tabs = pageObj.getTabs(); tabs.show(n);
    }
    else
    {
        var tabs = pageObj.getTabs(); tabs.hide(n);
    }
}

当然,这假设复选框值和选项卡之间存在关系。如果没有,那么您将不得不将它们全部列出为单独的 if/elseif/else 语句,这将很快失控。

【讨论】:

  • var ctrlSchemes = Runner.getControl(pageid, 'Schemes'); ctrlSchemes.on('change', function(e) { var selectedString = this.getValue(); var selectedArray = selectedString.split(","); var foundInArray = selectedArray.includes('1'); if (foundInArray) { var tabs = pageObj.getTabs(); tabs.show(4); } else { var tabs = pageObj.getTabs(); tabs.hide(4); } } );
  • @JonathanGreen tabs.hide(4) 当值 '4' 在 selectedString 中时,你想运行它吗?或者当值“1”是什么时候?我的答案中的代码基于“如果(1,2,3)包含1则为真,如果(2,3)包含1则为假”。如果要检查“4”而不是“1”,只需将.includes('1') 更改为.includes('4')。此外,进行一些调试并确保您确实进入了事件处理程序。如果是,请记录 selectedString 的值并确保它确实是您所期望的。
  • 不,最大值可能是 1,2,3,4,5。我想为每个可能的场景运行 5 个 if 代码,例如如果 x 包含 1,则查看选项卡 1,如果 x 包含 2,则取消隐藏选项卡 2,依此类推
  • @JonathanGreen 这和你问的有点不同。您可能希望创建一个数组,其中包含您的可能选项卡列表,遍历该列表,然后在每次迭代中将当前编号放入 .includes() 调用 中您的 tabs.show() /tabs.hide()逻辑
  • 因此,如果您查看之前的屏幕截图prntscr.com/gt7d8l,您将看到顶部的 tab4 (QMS) 选项卡是隐藏的,当我勾选 QMS(查找表中的值为 1 ),它应该取消隐藏选项卡 4,但在屏幕截图中看到,它没有...prntscr.com/gt7dw5
猜你喜欢
  • 2016-12-12
  • 1970-01-01
  • 2014-03-05
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多