強制用戶在範圍內提供輸入您好,我是 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>