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