Pergunta

Em primeiro lugar, serviço de limpeza:. Uma revisão rápida me faz pensar que este não é um duplicado, mas ficaria feliz em ser corrigido

Eu tenho um aplicativo ASP.NET MVC que tem uma página com múltiplas formas, cada forma tem alguns campos de texto, uma caixa de seleção ao acordo e um botão de envio. Eu gostaria de desativar o botão enviar, se a caixa de seleção acordo não é verificada individualmente para cada formulário. Eu tenho que trabalhar, mas tenho a sensação de que estou perdendo algo elegante e eu sei que existem pessoas aqui muito melhor em JQuery do que eu.

Aqui está o código que eu tenho trabalho:

    $(function() {
        $("form").each(function() {
            $("#Agreement", this).click(function() {
                if (this.checked) {
                    $($($(this).parent().get(0)).find("input:submit").get(0)).attr("disabled", "");
                } else {
                    $($($(this).parent().get(0)).find("input:submit").get(0)).attr("disabled", "disabled");
                }
            });
        });
    });

Você pode ver que o código é executado na página pronto, seleciona todos os 'forma de na página e anexa um manipulador de clique para cada uma das caixas de seleção acordo dentro de cada formulário. O que eu tenho lutado com, eo que parece particularmente deselegante, é o método de obtenção do objeto caixa de seleção que disparou o evento volta clique para o objeto formulário pai e depois para o irmão (da caixa) botão enviar para desativá-lo. Se alguém pode vir até com uma solução melhor, então eu estou pronto para ser educado!

Foi útil?

Solução

algo como isso poderia ser melhor:

$(function() {
    $("form").each(function() {
        $("#Agreement", this).click(function() {
            $('input:submit', this.form).attr("disabled", this.checked ? "" : "disabled");
        });
    });
});

Parece que você está re-utilizando id="Agreement" dentro de cada forma -. Você não deve fazer isso

Você pode até fazer isso se você alterar id de classe:

$(function() {
    $("form .Agreement").click(function() {
        $('input:submit', this.form).attr("disabled", this.checked ? "" : "disabled");
    });
});

Outras dicas

Eu abordá-lo por ter uma função disableSubmit (objId, checkState), em seguida, na verdade, apenas a codificação em cada caixa um atributo onclick = "disableSubmite ( 'Submit1', this.checked);

disableSubmit(objId, checkState)
{
   $(#objId).attr("disabled", checkState ? "" : "disabled");
}

Jquery é legal, mas às vezes você só precisa anexar o JS diretamente para o objeto que dispara-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top