developer tip

jQuery 비활성화 / 활성화 제출 버튼

copycodes 2020. 9. 29. 07:58
반응형

jQuery 비활성화 / 활성화 제출 버튼


이 HTML이 있습니다.

<input type="text" name="textField" />
<input type="submit" value="send" />

다음과 같이 어떻게 할 수 있습니까?

  • 텍스트 필드가 비어 있으면 제출을 비활성화해야합니다 (disabled = "disabled").
  • 비활성화 된 속성을 제거하기 위해 텍스트 필드에 무언가를 입력 할 때.
  • 텍스트 필드가 다시 비워지면 (텍스트가 삭제됨) 제출 버튼을 다시 비활성화해야합니다.

나는 다음과 같이 시도했다.

$(document).ready(function(){
    $('input[type="submit"]').attr('disabled','disabled');
    $('input[type="text"]').change(function(){
        if($(this).val != ''){
            $('input[type="submit"]').removeAttr('disabled');
        }
    });
});

… 그러나 작동하지 않습니다. 어떤 아이디어?


문제는 포커스가 입력에서 멀어 질 때만 변경 이벤트가 발생한다는 것입니다 (예 : 누군가가 입력을 클릭하거나 탭에서 빠져 나옴). 대신 keyup을 사용해보십시오.

$(document).ready(function() {
     $(':input[type="submit"]').prop('disabled', true);
     $('input[type="text"]').keyup(function() {
        if($(this).val() != '') {
           $(':input[type="submit"]').prop('disabled', false);
        }
     });
 });

$(function() {
  $(":text").keypress(check_submit).each(function() {
    check_submit();
  });
});

function check_submit() {
  if ($(this).val().length == 0) {
    $(":submit").attr("disabled", true);
  } else {
    $(":submit").removeAttr("disabled");
  }
}

이 질문은 2 년이 지났지 만 여전히 좋은 질문이며 첫 번째 Google 결과였습니다 ... 그러나 기존의 모든 답변 은 HTML 속성 (removeAttr ( "disabled")) "disabled"를 설정하고 제거 하는 것이 좋습니다. 올바른 접근 방식. 속성 대 속성에 대해 많은 혼란이 있습니다.

HTML

<input type="button" disabled>마크 업 의 "사용 안함" 은 W3C 에서 부울 속성 이라고합니다 .

HTML 대 DOM

인용문:

속성은 DOM에 있습니다. 속성은 DOM으로 구문 분석되는 HTML에 있습니다.

https://stackoverflow.com/a/7572855/664132

JQuery

관련 :

그럼에도 불구하고 확인 된 속성에 대해 기억해야 할 가장 중요한 개념은 확인 된 속성과 일치하지 않는다는 것입니다. 속성은 실제로 defaultChecked 속성에 대응하고, 초기 값으로 설정하기 만 표기 체크 박스의이. 확인 된 속성 값은 확인란의 상태에 따라 변경되지 않지만 확인 된 속성은 변경됩니다. 따라서 확인란이 선택되었는지 확인하는 브라우저 간 호환 방법은 속성을 사용하는 것입니다.

관련된:

속성은 일반적으로 직렬화 된 HTML 속성을 변경하지 않고 DOM 요소의 동적 상태에 영향을줍니다. 예로는 입력 요소의 값 속성, 입력 및 버튼 비활성화 된 속성 또는 체크 박스의 체크 속성이 있습니다. .attr () 메서드 대신 .prop () 메서드를 사용하여 비활성화 및 검사를 설정해야합니다.

$( "input" ).prop( "disabled", false );

요약

양식 요소의 [...] 비활성화 상태와 같은 DOM 속성을 [...] 변경하려면 .prop () 메서드를 사용합니다 .

( http://api.jquery.com/attr/ )


질문의 변경시 비활성화 부분에 대해서는 "입력"이라는 이벤트가 있지만 브라우저 지원이 제한 되고 jQuery 이벤트가 아니므로 jQuery가 작동하지 않습니다. 변경 이벤트는 안정적으로 작동하지만 요소가 포커스를 잃으면 시작됩니다. 따라서 둘을 결합 할 수 있습니다 (어떤 사람들은 키업 및 붙여 넣기도 듣습니다).

내가 의미하는 바를 보여주는 테스트되지 않은 코드는 다음과 같습니다.

$(document).ready(function() {
    var $submit = $('input[type="submit"]');
    $submit.prop('disabled', true);
    $('input[type="text"]').on('input change', function() { //'input change keyup paste'
        $submit.prop('disabled', !$(this).val().length);
    });
});

비활성화 된 속성 사용을 제거하려면

 $("#elementID").removeAttr('disabled');

비활성화 된 속성 사용을 추가하려면

$("#elementID").prop("disabled", true);

즐겨 :)


또는 모든 사소한 일에 jQ를 사용하고 싶지 않은 우리를 위해 :

document.getElementById("submitButtonId").disabled = true;

eric, 사용자가 텍스트를 입력 한 다음 모든 텍스트를 삭제할 때 귀하의 코드가 작동하지 않는 것 같습니다. 누군가가 같은 문제를 겪으면 다른 버전을 만들었습니다. 여기 여러분들갑니다 :

$('input[type="submit"]').attr('disabled','disabled');
$('input[type="text"]').keyup(function(){
    if($('input[type="text"]').val() == ""){
        $('input[type="submit"]').attr('disabled','disabled');
    }
    else{
        $('input[type="submit"]').removeAttr('disabled');
    }
})

다음은 파일 입력 필드에 대한 솔루션입니다 .

파일이 선택되지 않은 경우 파일 필드에 대한 제출 버튼을 비활성화 한 다음 사용자가 업로드 할 파일을 선택한 후 활성화하려면 :

$(document).ready(function(){
    $("#submitButtonId").attr("disabled", "disabled");
    $("#fileFieldId").change(function(){
        $("#submitButtonId").removeAttr("disabled");
    });
});

HTML :

<%= form_tag your_method_path, :multipart => true do %><%= file_field_tag :file, :accept => "text/csv", :id => "fileFieldId" %><%= submit_tag "Upload", :id => "submitButtonId" %><% end %>

다음과 같이 작동합니다.

$('input[type="email"]').keyup(function() {
    if ($(this).val() != '') {
        $(':button[type="submit"]').prop('disabled', false);
    } else {
        $(':button[type="submit"]').prop('disabled', true);
    }
});

HTML에 'disabled'속성이 있는지 확인하십시오.


다음과 같이 사용할 수도 있습니다.

$(document).ready(function() {
    $('input[type="submit"]').attr('disabled', true);
    $('input[type="text"]').on('keyup',function() {
        if($(this).val() != '') {
            $('input[type="submit"]').attr('disabled' , false);
        }else{
            $('input[type="submit"]').attr('disabled' , true);
        }
    });
});

여기 라이브 예제입니다


양식 로그인 :

<form method="post" action="/login">
    <input type="text" id="email" name="email" size="35" maxlength="40" placeholder="Email" />
    <input type="password" id="password" name="password" size="15" maxlength="20" placeholder="Password"/>
    <input type="submit" id="send" value="Send">
</form>

자바 스크립트 :

$(document).ready(function() {    
    $('#send').prop('disabled', true);

    $('#email, #password').keyup(function(){

        if ($('#password').val() != '' && $('#email').val() != '')
        {
            $('#send').prop('disabled', false);
        }
        else
        {
            $('#send').prop('disabled', true);
        }
    });
});

버튼 자체가 jQuery 스타일 버튼 (.button () 포함) 인 경우 disabled 속성을 제거 / 추가 한 후 올바른 클래스가 추가 / 제거되도록 버튼의 상태를 새로 고쳐야합니다.

$( ".selector" ).button( "refresh" );

위의 답변은 메뉴 기반 잘라 내기 / 붙여 넣기 이벤트 확인도 다루지 않습니다. 다음은 두 가지를 모두 수행하는 데 사용하는 코드입니다. 변경 사항이 발생하기 전에 잘라 내기 및 과거 이벤트가 실제로 발생하기 때문에 작업은 실제로 타임 아웃과 함께 발생하므로 타임 아웃이 발생하는 데 약간의 시간을 제공합니다.

$( ".your-input-item" ).bind('keyup cut paste',function() {
    var ctl = $(this);
    setTimeout(function() {
        $('.your-submit-button').prop( 'disabled', $(ctl).val() == '');
    }, 100);
});

우리는 단순히 if & else를 가질 수 있습니다. 입력이 비어 있다고 가정하면

  if($(#name).val() != '') {
                $('input[type="submit"]').attr('disabled' , false);
            }

그렇지 않으면 거짓을 참으로 바꿀 수 있습니다


바닐라 JS 솔루션. 하나의 입력뿐만 아니라 전체 형식에 대해 작동합니다.

문제에서 자바 스크립트 태그를 선택했습니다.

HTML 양식 :

var form = document.querySelector('form')
    var inputs = form.querySelectorAll('input')
    var required_inputs = form.querySelectorAll('input[required]')
    var register = document.querySelector('input[type="submit"]')
    form.addEventListener('keyup', function(e) {
        var disabled = false
        inputs.forEach(function(input, index) {
            if (input.value === '' || !input.value.replace(/\s/g, '').length) {
                disabled = true
            }
        })
        if (disabled) {
            register.setAttribute('disabled', 'disabled')
        } else {
            register.removeAttribute('disabled')
        }
    })
<form action="/signup">
        <div>
            <label for="username">User Name</label>
            <input type="text" name="username" required/>
        </div>
        <div>
            <label for="password">Password</label>
            <input type="password" name="password" />
        </div>
        <div>
            <label for="r_password">Retype Password</label>
            <input type="password" name="r_password" />
        </div>
        <div>
            <label for="email">Email</label>
            <input type="text" name="email" />
        </div>
        <input type="submit" value="Signup" disabled="disabled" />
    </form>

몇 가지 설명 :

이 코드에서 우리는 html 양식에 keyup 이벤트를 추가하고 모든 키 누름에서 모든 입력 필드를 확인합니다. 하나 이상의 입력 필드가 비어 있거나 공백 문자 만 포함하면 비활성화 된 변수에 참 값을 할당하고 제출 버튼을 비활성화합니다.

모든 필수 입력 필드가 채워질 때까지 제출 버튼을 비활성화해야하는 경우-다음을 교체하십시오.

inputs.forEach(function(input, index) {

와:

required_inputs.forEach(function(input, index) {

여기서 required_inputs는 필수 입력 필드 만 포함하는 이미 선언 된 배열입니다.


내 사용 사례에 맞도록 약간 작업해야했습니다.

제출하기 전에 모든 필드에 값이 있어야하는 양식이 있습니다.

내가 한 일은 다음과 같습니다.

  $(document).ready(function() {
       $('#form_id button[type="submit"]').prop('disabled', true);

       $('#form_id input, #form_id select').keyup(function() {
          var disable = false;

          $('#form_id input, #form_id select').each(function() {
            if($(this).val() == '') { disable = true };
          });

          $('#form_id button[type="submit"]').prop('disabled', disable);
       });
  });

여기에 답변 해 주신 모든 분들께 감사드립니다.


Please see the below code to enable or disable Submit button

If Name and City fields has value then only Submit button will be enabled.

<script>
  $(document).ready(function() {
    $(':input[type="submit"]').prop('disabled', true);

    $('#Name').keyup(function() {
      ToggleButton();
    });
    $('#City').keyup(function() {
      ToggleButton();
    });

  });

function ToggleButton() {
  if (($('#Name').val() != '') && ($('#City').val() != '')) {
    $(':input[type="submit"]').prop('disabled', false);
    return true;
  } else {
    $(':input[type="submit"]').prop('disabled', true);
    return false;
  }
} </script>
<form method="post">

  <div class="row">
    <div class="col-md-4">
      <h2>Getting started</h2>
      <fieldset>
        <label class="control-label text-danger">Name</label>
        <input type="text" id="Name" name="Name" class="form-control" />
        <label class="control-label">Address</label>
        <input type="text" id="Address" name="Address" class="form-control" />
        <label class="control-label text-danger">City</label>
        <input type="text" id="City" name="City" class="form-control" />
        <label class="control-label">Pin</label>
        <input type="text" id="Pin" name="Pin" class="form-control" />
        <input type="submit" value="send" class="btn btn-success" />
      </fieldset>
    </div>
  </div>
</form>


Disable: $('input[type="submit"]').prop('disabled', true);

Enable: $('input[type="submit"]').removeAttr('disabled');

The above enable code is more accurate than:

$('input[type="submit"]').removeAttr('disabled');

You can use both methods.


take look at this snippet from my project

 $("input[type="submit"]", "#letter-form").on("click",
        function(e) {
             e.preventDefault();


$.post($("#letter-form").attr('action'), $("#letter-form").serialize(),
                 function(response) {// your response from form submit
                    if (response.result === 'Redirect') {
                        window.location = response.url;
                    } else {
                        Message(response.saveChangesResult, response.operation, response.data);
                    }
});
$(this).attr('disabled', 'disabled'); //this is what you want

so just disabled the button after your operation executed

$(this).attr('disabled', 'disabled');


Al types of solution are supplied. So I want to try for a different solution. Simply it will be more easy if you add a id attribute in your input fields.

<input type="text" name="textField" id="textField"/>
<input type="submit" value="send" id="submitYesNo"/>

Now here is your jQuery

$("#textField").change(function(){
  if($("#textField").val()=="")
    $("#submitYesNo").prop('disabled', true)
  else
    $("#submitYesNo").prop('disabled', false)
});

I Hope below code will help someone ..!!! :)

jQuery(document).ready(function(){

    jQuery("input[type=submit]").prop('disabled', true);

    jQuery("input[name=textField]").focusin(function(){
        jQuery("input[type=submit]").prop('disabled', false);
    });

    jQuery("input[name=textField]").focusout(function(){
        var checkvalue = jQuery(this).val();
        if(checkvalue!=""){
            jQuery("input[type=submit]").prop('disabled', false);
        }
        else{
            jQuery("input[type=submit]").prop('disabled', true);
        }
    });

}); /*DOC END*/

참고URL : https://stackoverflow.com/questions/1594952/jquery-disable-enable-submit-button

반응형