gpt4 book ai didi

javascript - 如何触发一个事件,该事件取决于满足特定条件的 2 个表单输入?

转载 作者:行者123 更新时间:2023-11-30 06:04:24 25 4
gpt4 key购买 nike

我想根据 2 个表单输入是否匹配来显示/隐藏页面上的元素。所以在这个例子中,如果文本字段大于 100000 并且单选按钮具有特定值,则将显示所述元素。如果仍然选择了正确的单选,但数值下降到 100000 以下,则元素隐藏。 (此代码是更大脚本的一部分,以防它没有意义)。

它在大多数情况下都有效,但是文本字段的 onchange/onkeyup 事件在与单选值 onclick< 一起使用时不会自行触发 事件。我必须重新单击单选按钮以更改文本字段值才能触发事件。 (这不是 onblur 问题。onchange 本身可以正常工作,但不能与逻辑 && 运算符一起使用。)

    <li id="f-container-applicant-bondamount">
<label for="f-applicant-bondamount">Amount of Bond</label>
<input type="text" name="ApplicantBondAmount" id="f-applicant-bondamount" onkeypress="showMoreInfo(this);" />
</li>

<li id="f-container-applicant-is">
<label for="f-applicant-is">Applicant is...</label>
<ul>
<li>
<label for="f-applicant-is_0">
<input type="radio" name="ApplicantIs" id="f-applicant-is_0" value="Administrator" onclick="showMoreInfo(this);" />
Administrator
</label>
</li>
<li>
<label for="f-applicant-is_1">
<input type="radio" name="ApplicantIs" id="f-applicant-is_1" value="Executor" onclick="showMoreInfo(this);" />
Executor
</label>
</li>
</ul>
</label>
</li>

<li id="f-container-applicant-moreinfo">
<label for="f-applicant-moreinfo">More Info</label>
<input type="text" name="ApplicantMoreInfo" id="f-applicant-moreinfo" />
</li>




function showMoreInfo(x) {
var bond = document.getElementById('f-applicant-bondamount');
var y = bond.value;

if (y > 100000 && x.value == "Administrator") {
document.getElementById('f-container-applicant-moreinfo').style.display = 'block';
}
else if (y <= 100000 && x.value == "Administrator") {
document.getElementById('f-container-applicant-moreinfo').style.display = 'none';
}
}

提前致谢。

最佳答案

编辑:您的代码不起作用,因为 showMoreInfo(x) 函数假定 x 参数将是对一个或另一个单选按钮的引用,但随后您的文本输入的 onchange/onkeyup/whatever 事件正在调用相同的函数并传递对自身的引用 - 这就是为什么它仅在您单击单选按钮时才有效。您可以改为尝试类似以下的方法,让该函数计算出它自己对您的 HTML 元素的引用,而不是将它们传入:

function showMoreInfo() {
var bond = document.getElementById('f-applicant-bondamount');
var adminRadio = document.getElementById('f-applicant-is_0');
// var theOtherRadioIfYouNeedIt = document.getElementById('f-applicant-is_1');

var y = bond.value;

if (y > 100000 && adminRadio.checked) {
document.getElementById('f-container-applicant-moreinfo').style.display = 'block';
}
else if (y <= 100000 && adminRadio.checked) {
document.getElementById('f-container-applicant-moreinfo').style.display = 'none';
}
}

不过,我最初关于键盘事件不足的观点仍然成立。

我原来的回答:

正如 wombleton 所说,onchange 仅在焦点离开字段时发生 - 这就是为什么在您的示例中单击单选按钮会使 onchange 发生。因此,正如已经说过的,您可以使用 onkeyup 而不是 onchange

但是,请记住,用户可以通过多种方式在不使用键盘的情况下更改输入中的值(因此没有 onkeyup),例如,拖放-拖放到输入上(拖出将改变焦点,但如果你不再使用 onchange ......)。或者右键-上下文菜单-粘贴、剪切或删除。副手我不确定满足这些需求的最简单方法是什么(我不需要担心,因为我不喜欢页面上的内容随着用户在字段中键入而改变,我通常只需要 onkeyup 专门检查回车键),但您可以查看 onpaste 和 ondrop 事件。

关于javascript - 如何触发一个事件,该事件取决于满足特定条件的 2 个表单输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com