Javascript 如果函数工作,如何使函数具有多个条件?
我有一个表单,它由一些元素组成,比如选择输入和复选框 “提交”按钮已禁用,我只想在满足两个条件时启用该按钮。初始版本运行良好,但前提是单击复选框是最后一步。但它应该是一个对选择和复选框中的单击/更改都有反应的函数 下面的代码正在工作,但与上面解释的问题有关Javascript 如果函数工作,如何使函数具有多个条件?,javascript,jquery,Javascript,Jquery,我有一个表单,它由一些元素组成,比如选择输入和复选框 “提交”按钮已禁用,我只想在满足两个条件时启用该按钮。初始版本运行良好,但前提是单击复选框是最后一步。但它应该是一个对选择和复选框中的单击/更改都有反应的函数 下面的代码正在工作,但与上面解释的问题有关 $('#toscheck').click(function() { if ($(this).is(':checked') && $("#ctry").val().length > 0) { $('#p
$('#toscheck').click(function() {
if ($(this).is(':checked') && $("#ctry").val().length > 0) {
$('#pjo').removeAttr('disabled');
$('#sjo').removeAttr('disabled');
} else {
$('#pjo').attr('disabled', 'disabled');
$('#sjo').attr('disabled', 'disabled');
}
});
以下解决方案不起作用:
$('document').ready(function() {
if ($('#toscheck').is(':checked') && $("#ctry").val().length > 0) {
$('#pjo').removeAttr('disabled');
$('#sjo').removeAttr('disabled');
} else {
$('#pjo').attr('disabled', 'disabled');
$('#sjo').attr('disabled', 'disabled');
}
});
但我怎么才能解决这个问题呢?我在SO上的发现并没有真正的帮助
再次强调:它应该如下工作;如果选中该复选框且所选选项具有值,则按钮将启用
提前谢谢
$(document).ready(function() {
$('#toscheck,#ctry').change(function() {
if ($('#toscheck').is(':checked') && $("#ctry").val().length > 0) {
$('#pjo').removeAttr('disabled');
$('#sjo').removeAttr('disabled');
} else {
$('#pjo').attr('disabled', 'disabled');
$('#sjo').attr('disabled', 'disabled');
}
});
});
使用此代码
.更改功能检测更改,然后随时检查您的和条件是否满足
并在引号中添加toscheck,即“toscheck”
$('#toscheck,#xyz,#abc').change()
用于检测多个元素的更改
使用此代码
.更改功能检测更改,然后随时检查您的和条件是否满足
并在引号中添加toscheck,即“toscheck”
$('#toscheck,#xyz,#abc').change()
要检测多个元素的更改,请首先将元素存储在变量中:
let $toscheck = $('#toscheck'),
$ctry = $("#ctry"),
$pjo = $('#pjo'),
$sjo = $('#sjo');
然后,使用存储的变量创建验证函数。请注意,我将attr和removeAttr替换为.prop,这样更好:
function checkThings(){
if ($toscheck.is(':checked') && $ctry.val().length > 0) {
$pjo.prop('disabled', false);
$sjo.prop('disabled', false);
} else {
$pjo.prop('disabled', true);
$sjo.prop('disabled', true);
}
}
然后,绑定事件:
$toscheck.add($ctry).on( 'change', checkThings );
请注意,我在这两个元素上都使用了change,因为它可以处理输入和复选框
最终代码:
let $toscheck = $('#toscheck'),
$ctry = $("#ctry"),
$pjo = $('#pjo'),
$sjo = $('#sjo');
function checkThings(){
if ($toscheck.is(':checked') && $ctry.val().length > 0) {
$pjo.prop('disabled', false);
$sjo.prop('disabled', false);
} else {
$pjo.prop('disabled', true);
$sjo.prop('disabled', true);
}
}
$toscheck.add($ctry).on( 'change', checkThings );
首先,将元素存储在变量中:
let $toscheck = $('#toscheck'),
$ctry = $("#ctry"),
$pjo = $('#pjo'),
$sjo = $('#sjo');
然后,使用存储的变量创建验证函数。请注意,我将attr和removeAttr替换为.prop,这样更好:
function checkThings(){
if ($toscheck.is(':checked') && $ctry.val().length > 0) {
$pjo.prop('disabled', false);
$sjo.prop('disabled', false);
} else {
$pjo.prop('disabled', true);
$sjo.prop('disabled', true);
}
}
然后,绑定事件:
$toscheck.add($ctry).on( 'change', checkThings );
请注意,我在这两个元素上都使用了change,因为它可以处理输入和复选框
最终代码:
let $toscheck = $('#toscheck'),
$ctry = $("#ctry"),
$pjo = $('#pjo'),
$sjo = $('#sjo');
function checkThings(){
if ($toscheck.is(':checked') && $ctry.val().length > 0) {
$pjo.prop('disabled', false);
$sjo.prop('disabled', false);
} else {
$pjo.prop('disabled', true);
$sjo.prop('disabled', true);
}
}
$toscheck.add($ctry).on( 'change', checkThings );
请包括您的html$toscheck->$'toscheck'。投票结束是一个打字错误。还请注意,您可以组合选择器:$'pjo,sjo'。removeAttr'disabled';。我还建议使用道具而不是属性。然后你可以这样做。根据需要设置'disabled',true或false解决方案具有'。这不是问题所在。我把它们写在密码里了。删除此项并从我的脑海中输入。@rory OP描述的问题与打字错误无关。请包括您的html$toscheck->$'toscheck'。投票结束是一个打字错误。还请注意,您可以组合选择器:$'pjo,sjo'。removeAttr'disabled';。我还建议使用道具而不是属性。然后你可以这样做。根据需要设置'disabled',true或false解决方案具有'。这不是问题所在。我把它们写在密码里了。删除此内容并从我的脑海中输入。@rory OP描述的问题与打字错误无关。这六分钟结束后,我将接受您的回答。:-至于引用,我在我最初的第二个解决方案中得到了它们,然后删除了,因为它不起作用。但你是对的。仅供参考,文档不需要引用。它强制jQuery执行querySelectorAll,而querySelectorAll不返回任何内容,也不需要返回。这里它是一种快速复制粘贴类型:@nucky您也可以在中使用多个元素。六分钟结束后立即更改函数,这表明我将接受您的答案。:-至于引用,我在我最初的第二个解决方案中得到了它们,然后删除了,因为它不起作用。但你是对的。仅供参考,文档不需要引用。它强制jQuery执行querySelectorAll,而querySelectorAll不返回任何内容,也不需要返回。这里它是一种快速复制粘贴类型:@nucky您还可以在中使用多个元素。change Function的工作原理甚至比Avi的解决方案要好一点。谢谢。比Avi的解决方案更有效。谢谢