Javascript 使用onclick更改函数内的变量

Javascript 使用onclick更改函数内的变量,javascript,html,Javascript,Html,如果单击单选按钮,我的javascript需要更改函数中的变量。我尝试过两种方法——if-else语句就是其中之一,但到目前为止没有任何效果 在上一次尝试中,我尝试在单击时执行一个函数,它将重置前面在第一个函数中声明的变量 代码的全部目的是生成一个随机密码,并选择使用特殊符号 它也是一个Chrome扩展,因此禁止使用内联代码 <html> <br> <h1>Set the number of characters</h1>

如果单击单选按钮,我的javascript需要更改函数中的变量。我尝试过两种方法——if-else语句就是其中之一,但到目前为止没有任何效果

在上一次尝试中,我尝试在单击时执行一个函数,它将重置前面在第一个函数中声明的变量

代码的全部目的是生成一个随机密码,并选择使用特殊符号

它也是一个Chrome扩展,因此禁止使用内联代码

<html>
    <br>
    <h1>Set the number of characters</h1>
    <input id="num"  type = "number" value = "20" name = "value"><br><br>
    
    <form>
    <input type="radio" type = "text"  id="spec_symb" name="symbols" value="specialSymbols">
    <label for="spec_symb">Use special symbols</label><br>
</form>
<button id="click">Generate</button><br>
    <p id="text" ></p>
    
    <script src="jquery-3.5.1.min.js"></script>
    <script src="pass.js"></script>
    
</html>


设置字符数

使用特殊符号
生成

函数过程(长度){
var passw=“”;
var symbols=“ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789”;
getElementById(“spec_symb”).onclick=function(){func()};
函数func(){window.symbols=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz012456789!@#$%^&*()”
};
var SLENGHT=符号长度;
对于(变量i=0;i
将if/else语句与document.getElementById('spec_symb')一起使用。已选中


这应该会让你朝着你想要的方向前进。

每次你调用
pass()
函数时,你给
symbols
变量赋值
ABC..
,你希望用户在调用函数的同时点击
\spec\u symb
(这几乎是不可能的)。您不应该这样做,而是应该验证输入是否被选中,然后为其分配一个新值,在您的情况下,您可以只添加到旧字符串中,如下面的示例所示

document.querySelector(#pass”).onclick=()=>{
让chars=“ABC…”;
if(document.querySelector(“#input”).选中)
字符+=“#@$”;
控制台日志(chars);
};


结果
您的结构有点不正确,您正在尝试调用不存在的
passw
函数

您也不应该在
pass
函数内设置
符号。首先将其设置为默认值,如果选中该复选框,则可能会覆盖它

您可能还应该使用复选框而不是单选按钮,因为一旦选中单选按钮,就无法取消选中它

我想这就是你想要的:

//只设置对DOM元素的引用一次,而不是在函数中
常量输入=document.getElementById(“num”);
常量输出=document.getElementById(“文本”);
const special=document.getElementById(“spec_symb”);
特殊.addEventListener(“单击”,func);
document.getElementById(“单击”).addEventListener(“单击”,myFunction);
//将符号设置为默认字符集
let symbols=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz012456789”;
函数func(){
//如果选中复选框,则覆盖符号。
如果(特殊检查){
symbols=“ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789!@#$%^&*()”;
}否则{
symbols=“ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789”;
}
}
函数myFunction(){
output.textContent=pass(input.value);
}
功能传递(长度){
var passw=“”;
var SLENGHT=符号长度;
对于(变量i=0;i
设置字符数


使用特殊符号
生成

我使用的是
document.getElementById('spec\u symb')。之前单击==true
,但是
document.getElementById('spec\u symb')。选中==true
实际上可以工作。非常感谢。
function pass(length) {
    var passw = "";
    var symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    document.getElementById("spec_symb").onclick = function(){func()};
    function func(){window.symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_"
 };
 var slength = symbols.length;
    for ( var i = 0; i < length; i++ ) {
       passw = passw + symbols.charAt(Math.floor(Math.random() * slength));
    }
    return passw;}
document.getElementById("click").onclick = function(){myFunction()};
 function myFunction(){
     document.getElementById("text").innerHTML = passw(document.getElementById("num").value);
 }