我正在尝试使用jQuery prop()
方法禁用元素(表单字段)。有两个字段,一个称为fee
,另一个称为currency
。每当fee
设置为0时,第二个字段currency
将被禁用。这可以解决问题:
$("#fee").change(function() {
var disabled = (this.value == "0");
console.log(disabled);
$("#currency").prop("disabled", disabled);
}).change(); //to trigger on load
我想实现的是,第二个字段在离开第一个字段之前立即变为禁用状态(是在focus
而不是在blur
上?)。我想实现此目的的原因是,只要费用为0,每当用户使用TAB按钮时,他/她都会立即选择currency
之后的字段。
这是到目前为止我所拥有的一个例子: fiddle
答案 0 :(得分:1)
尝试 input
event 。立即进行任何点击或按键操作。归结为#fee
为“ 0”,#currency
将为disabled
。尝试在#fee
上进行制表,键入或微调,因为input
事件没有条件 如何 ,它唯一需要担心的是它 有 数据。
此外,当您有2个条件并且还有另一对条件依赖于它时,您应该从默认条件开始。我将#fee
的值从'0'和#currency
disabled
开始。现在,它最初是默认启动的,不再需要在链的末尾添加额外的.change()
(尽管我不确定它是否真的有用……IDK我没有对其进行测试) 。
还向每个输入添加了 tab-index='0'
,以确保制表符可继续到下一个可用输入。默认情况下,所有输入都以这种方式运行,并且流程中永远不会包含禁用的元素,因此tab-index='0'
可能会过大。请注意,在禁用的#currency
之前的输入将集中,但没有tab-index='0'
。当然,使用input
事件将使关注点成为讨论的重点。
$("#fee").on('input', function() {
var activeFee = this.value !== '0' ? false : true;
$('#currency').prop('disabled', activeFee);
});
<input id='fee' type='number' tab-index='0' value='0'>
<input id='currency' tab-index='0' disabled>
<input id='tariff' type='number'>
<input id='tax' type='number' tab-index='0'>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:0)
您可以使用键入功能
$("#fee").keyup(function() {
var disabled = (this.value == "0");
console.log(disabled);
$("#currency").prop("disabled", disabled);
}).change(); //to trigger on load
答案 2 :(得分:0)
$("#fee").keyup(function() {
var disabled = (this.value == "0");
console.log(disabled);
$("#currency").prop("disabled", disabled);
}).keyup(); //to trigger on load
错误事件:)
答案 3 :(得分:0)
因为您正在使用change
。直到取消聚焦(模糊)输入框,更改才会触发。试试这个:
$("#fee").keyup(function() {
var disabled = (this.value == "0");
console.log(disabled);
$("#currency").prop("disabled", disabled);
}).keyup(); //to trigger on load
答案 4 :(得分:0)
您可以使用keyup
或keydown
事件而不是change
来完成此操作,或者您要使用现有代码,而不是像这样编写代码:
$("#fee").change(function() {
var disabled = (this.value == "0");
console.log(disabled);
$("#currency").prop("disabled", disabled);
$("#somethingelse").focus(); //set focus to the field below currency
}).change(); //to trigger on load
这样,当用户按下TAB时,他们将被移至货币下面的字段
答案 5 :(得分:0)
尝试以下代码:
$("#fee").keyup(function() {
var disabled = (this.value == "0");
console.log(disabled);
$("#currency").prop("disabled", disabled);
}).change(); //to trigger on load
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Fee: <input id="fee"><br> Currency: <input id="currency"><br> Something else:<input id="somethingelse">
我刚刚将事件从change
更改为keyup
。