强制用户在范围内提供输入您好,我是 JMP 的新手,我不确定如何编写引发错误的脚本以防止用户输入无效数字。 我希望用户输入一个最终保存到变量中的数字,但如果该数字超出 1-4 范围,则重新提示输入。
这是我到目前为止没有任何错误检查的内容:
Names Default To Here (1);
num = 0;
w = New Window( "Prompt",
<<MODAL></MODAL>
任何有关实现此目的的帮助或建议将不胜感激!
脚本回复:强制用户在范围内提供输入只需在函数调用后添加一个关闭窗口。
b1 = button box("First Program",
program1();
nw << close window();
),
回复:强制用户在范围内提供输入这非常有效! 再次感谢!
回复:强制用户在范围内提供输入如果在新窗口之后有其他代码,您可以使用 << 模态将新窗口更改为模态窗口(可能需要一些其他小的更改)。 如果使用 <
nw = new window("Test Options", << modal,
panel box("Click the button to run the desired program",
lineup box(ncol(1),
b1 = button box("First Program",
program1();
okBtn << Click();
),
b2 = button box("Second Program",
program2();
okBtn << Click();
),
b3 = button box("Third Program",
program3();
okBtn << Click();
),
b4 = button box("Fourth Program",
program4();
okBtn << Click();
),
),
),
h list box(okbtn = Button Box("OK"), cancelBtn=ButtonBox("Cancel"))
);
Show("shouldnt execute before window is closed");回复:强制用户在范围内提供输入重新编辑:实际上,由于某种原因,在新窗口中执行按钮之后出现的任何代码似乎都在链接到按钮的程序之前运行。 有谁知道为什么会这样?
回复:强制用户在范围内提供输入那太棒了! 我认为这对我的目的有用,谢谢分享! 最后,这不是一个非常重要的功能,但你知道是否有一种方法可以按下执行程序的按钮,然后窗口自动关闭而无需用户按下“退出”?
回复:强制用户在范围内提供输入如果您引用所有用户都可以访问的文件共享上的文件,它就可以工作。
您还可以包括要在主 JSL 代码本身中运行的程序作为单独的函数。这是一个例子:
// First program
program1 = function({},
show("Running program1");
// JSL code for first program
);
// Second program
program2 = function({},
show("Running program2");
// JSL code for second program
);
// Third program
program3 = function({},
show("Running program3");
// JSL code for third program
);
// Fourth program
program4 = function({},
show("Running program4");
// JSL code for fourth program
);
nw = new window("Test Options",
panel box("Click the button to run the desired program",
lineup box(ncol(1),
b1 = button box("First Program",
program1();
),
b2 = button box("Second Program",
program2();
),
b3 = button box("Third Program",
program3();
),
b4 = button box("Fourth Program",
program4();
),
),
),
bexit = button box("Exit",
nw << close window();
),
);
查看 JSL 文档以获取有关函数的更多信息。
回复:强制用户在范围内提供输入你好! 这是解决问题的好方法。 不过我想知道,我是否能够共享所有程序脚本,以便拥有代码的任何人都可以运行与按钮链接的相同程序? 或者,如果文件目录路径对于下载 .jsl 脚本的任何人都是唯一的,那将不可能吗?
回复:强制用户在范围内提供输入如果您想根据用户选择的内容 (1-4) 运行不同的程序,我会改用按钮。这是它的样子:

这是代码。请注意,我使用面板框来包围按钮,并使用排列框来对齐按钮框的两侧。要运行的程序存储在 c:\myfiles 中,名为 program1.jsl、program2.jsl 等。根据您的情况更改文件夹和 JSL 程序名称。
nw = new window("Test Options",
panel box("Click the button to run the desired program",
lineup box(ncol(1),
b1 = button box("First Program",
include("c:\myfiles\program1.jsl");
nw << close window();
),
b2 = button box("Second Program",
include("c:\myfiles\program2.jsl");
nw << close window();
),
b3 = button box("Third Program",
include("c:\myfiles\program3.jsl");
nw << close window();
),
b4 = button box("Fourth Program",
include("c:\myfiles\program4.jsl");
nw << close window();
),
),
),
bexit = button box("Exit",
nw << close window();
),
);回复:强制用户在范围内提供输入再次非常感谢,超级有帮助!
回复:强制用户在范围内提供输入那应该是一样的,但它看起来确实有点奇怪。 使用脚本索引中的模态示例:
这部分基本上是 if 的条件 1:
ex = New Window("Dialog() example",
<<MODAL></MODAL>这就是结果 1
ex["variable"]
并返回其他:
"CANCEL"
并且因为那些结果和基本上最后几行将根据 if 条件结果执行,它们将被打印到日志中。 您可以通过以下两个简短脚本对此进行测试:
a = 1; //will print 1 to Log as this is the only and last row in script
a = 1;
Write(); //will print this as it is the last row of code
如果您的意思是 ex 变量是如何工作的,您可以通过在脚本索引中运行示例并在最后添加 Show(ex) 来相当容易地检查它。
下面是一个 if 语句的示例,通过添加括号和注释使 if 语句更加清晰,我还为 ex 变量添加了 Show() :
Names Default To Here(1);
If(
( //condition1 starts
ex = New Window("Dialog() example",
<<MODAL></MODAL>(请注意,由于 Show() “CANCEL” 不是按下取消时的最后一行代码,它不会被打印出来,这也会告诉您即使按下取消,变量值也会更新)
希望我没有正确解释一切。 您可以从 JMP 帮助和脚本指南中找到更多信息:构造模态窗口
回复:强制用户在范围内提供输入那很完美! 太感谢了! :^)
出于学习目的,代码的结尾是什么意思? 我通常知道它的 If(condition 1, result 1, condition 2, result 2, ..... resultElse);但我对此不熟悉:
ex["button"] == 1;
,
ex["variable"],
"CANCEL
回复:强制用户在范围内提供输入我认为您可以为此使用 << On Validate() 。
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>
编辑:
还是您的意思是使按钮变灰/禁用?
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>回复:强制用户在范围内提供输入这是个好主意! 不幸的是,如果用户不小心输入了 6 但实际上想输入 3,他们的输入将被自动选择为 4。 抱歉,如果问题有点复杂。
回复:强制用户在范围内提供输入除非值为 1-4,否则是否有办法阻止用户按下 OK 按钮并退出窗口? 我认为实际上,用户可以退出窗口并且输入将设置为 0。
回复:强制用户在范围内提供输入之前没有看到这个(或者已经忘记了)。 使用 << 设置最小值和 << 设置最大值:
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL></MODAL>
回复:强制用户在范围内提供输入这样使用 Radio Box 来实现不是更简单吗?
Names Default To Here(1);
New Window("Example", rb = Radio Box({"True", "False", "None of the above"}, Print("Selection Changed")));回复:强制用户在范围内提供输入您好,非常感谢您的回复! 我想这样做,以便用户被迫选择一个范围内的数字,而不是让代码根据用户的错误进行调整。 例如,我认为每个数字都会与将要运行的一段代码相关联。
Names Default To Here (1);<BR />num = 0;<BR />w = New Window( "Prompt",
<<MODAL></MODAL>
然后,我将编写一个 if 语句,其中如果输入 == 1,则运行此代码,如果输入 ==2,则运行另一段代码,依此类推。 所以对于我的情况,我不希望数字在超出范围时自动更正为 1 或 4。 对不起,如果那令人困惑!
回复:强制用户在范围内提供输入您可以使用数字编辑框并为输入设置下限和上限,甚至声明界限是否有效。 您不需要编写表达式或函数来检查。 它已经内置于此展示盒中。
回复:强制用户在范围内提供输入这是对处理仅允许值 1-4 的要求的代码的修改
Names Default To Here( 1 );
num = 0;
input = 0;
w = New Window( "Prompt",
<<MODAL> 4 | str1 << get < 1,
str1 << set( 0 )
)
)
)
),
H List Box( Button Box( "Cancel" ), Button Box( "OK" ) )
),
);
If( w["button"] == 1,
input = w["str1"]
);
Show( input );</MODAL>回复:强制用户在范围内提供输入您可以以某种方式使用 set 函数。
下面是一个示例,如果用户尝试输入低于 1 的值,则值设置为 1;如果用户输入高于 4,则值设置为 4
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL> 4, this << set(4)
);
))
)
),
);
input = w["str1"];
show(input);</MODAL>