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的解决方案更有效。谢谢