简体   繁体   English

使用jQuery单击后退按钮后,输入字段不会被禁用

[英]Input fields are not getting disabled after clicking on back button using jquery

Once the form is opened all the input fields and select fields are in disabled mode after clicking on edit button the fields will be in editable format. 打开表单后,单击“编辑”按钮后,所有输入字段和选择字段均处于禁用模式,这些字段将为可编辑格式。

Once i click on edit button the text is changing to Back button and once i click on back button the text will be edit button but the problem is once i click on back button the text is changing to edit successfully but the fields also should change from editable mode to disable mode. 一旦我单击“编辑”按钮,文本将更改为“后退”按钮,一旦我单击“后退”按钮,文本将为“编辑”按钮,但问题是,一旦我单击“后退”按钮,文本将更改为成功编辑,但字段也应从可编辑模式以禁用模式。

 $('input').attr('disabled', true); $('.editbutton').on('click', function(e) { e.preventDefault(); $('input').attr('disabled', false); }) $('select').attr('disabled', true); $('.editbutton').on('click', function(e) { e.preventDefault(); $('select').attr('disabled', false); }) function myFunction() { var btn = document.getElementById("myButton"); if (btn.value == "Edit") { btn.value = "Back"; btn.innerHTML = "Back"; } else { btn.value = "Edit"; btn.innerHTML = "Edit"; } } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button id="myButton" onclick="myFunction()" class="btn btn-default editbutton" value="Edit">Edit</button> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="first-name">First Name</label> <input type="text" id="first-name" value="Doctor" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="last-name">Last Name</label> <input type="text" id="last-name" value="p" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="email">Email</label> <input type="email" id="email" value="doctor@gmail.com" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="phone-number">Phone Number</label> <input type="text" id="phone-number" value="1234567890" class="form-control validate"> </div> <div class="md-form col-md-2"> <label data-error="wrong" data-success="right" for="isverified">Is Verified?</label><br/> <input type="checkbox" name="verified" value="verified" checked> </div> <button class="btn btn-default">Update Profile</button> 

Just check your button text and enable , disable based on this. 只需检查您的按钮文字并启用,基于此禁用。

 $('input').attr('disabled', true); $('select').attr('disabled', true); $('.editbutton').on('click', function(e) { let txt = $(this).text(); e.preventDefault(); if (txt == "Edit") { $('input').attr('disabled', true); $('select').attr('disabled', true); } else { $('input').attr('disabled', false); $('select').attr('disabled', false); } }) function myFunction() { var btn = document.getElementById("myButton"); if (btn.value == "Edit") { btn.value = "Back"; btn.innerHTML = "Back"; } else { btn.value = "Edit"; btn.innerHTML = "Edit"; } } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script> <button id="myButton" onclick="myFunction()" class="btn btn-default editbutton" value="Edit">Edit</button> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="first-name">First Name</label> <input type="text" id="first-name" value="Doctor" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="last-name">Last Name</label> <input type="text" id="last-name" value="p" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="email">Email</label> <input type="email" id="email" value="doctor@gmail.com" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="phone-number">Phone Number</label> <input type="text" id="phone-number" value="1234567890" class="form-control validate"> </div> <div class="md-form col-md-2"> <label data-error="wrong" data-success="right" for="isverified">Is Verified?</label><br/> <input type="checkbox" name="verified" value="verified" checked> </div> <button class="btn btn-default">Update Profile</button> 

Try this method: 试试这个方法:

 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> function myFunction() { var btn = document.getElementById("myButton"); if (btn.value == "Edit") { btn.value = "Back"; btn.innerHTML = "Back"; enableDisable(true) } else { btn.value = "Edit"; btn.innerHTML = "Edit"; enableDisable(false) } } function enableDisable(enable) { if (enable) { $('input').attr('disabled', false); } else { $('input').attr('disabled', true); } } </script> 

You're essentially attaching three click event listeners to element's using the editbutton class. 您实际上是使用editbutton类将三个click事件监听器附加到元素的。 The onclick inside the html code is enough tough. html代码中的onclick足够强大。

So simply deactivate your input field initially and enable/disable it inside the callback function myFunction(). 因此,只需简单地首先停用输入字段并在回调函数myFunction()中启用/禁用它即可。

Like this: 像这样:

 $('input').attr('disabled', true); function myFunction() { var btn = document.getElementById("myButton"); if (btn.value == "Edit") { btn.value = "Back"; btn.innerHTML = "Back";$('input').attr('disabled', false); } else { btn.value = "Edit"; btn.innerHTML = "Edit";$('input').attr('disabled', true); } } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button id="myButton" onclick="myFunction()" class="btn btn-default editbutton" value="Edit">Edit</button> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="first-name">First Name</label> <input type="text" id="first-name" value="Doctor" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="last-name">Last Name</label> <input type="text" id="last-name" value="p" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="email">Email</label> <input type="email" id="email" value="doctor@gmail.com" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="phone-number">Phone Number</label> <input type="text" id="phone-number" value="1234567890" class="form-control validate"> </div> <div class="md-form col-md-2"> <label data-error="wrong" data-success="right" for="isverified">Is Verified?</label><br/> <input type="checkbox" name="verified" value="verified" checked> </div> <button class="btn btn-default">Update Profile</button> 

You have not set it up properly. 您尚未正确设置。 This should work. 这应该工作。 Also remove call to myFunction() 同时删除对myFunction()的调用

<script>
// Disable all elements.
$('input').attr('disabled', true);

// Set up onClickListener 
$('.editbutton').on('click', (e) => {
    var btn = document.getElementById("myButton");
    if (btn.value == "Edit") {
        $('input').attr('disabled', false);
        btn.value = "Back";                                                                  
        btn.innerHTML = "Back";
    } else {
        $('input').attr('disabled', true);
        btn.value = "Edit";                                                                  
        btn.innerHTML = "Edit";
    }
});
</script>

You try using removeAttr() to remove the attribute you want: 您尝试使用removeAttr()删除所需的属性:

 $('input').attr('disabled', true); $('select').attr('disabled', true); $('#myButton').on('click', function(e) { e.preventDefault(); if($('input').attr('disabled')){ $('input').removeAttr('disabled'); $('select').removeAttr('disabled'); this.textContent = "Back"; } else{ $('input').attr('disabled', true); $('select').attr('disabled', true); this.textContent = "Edit"; } }) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button id="myButton" class="btn btn-default editbutton" value="Edit">Edit</button> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="first-name">First Name</label> <input type="text" id="first-name" value="Doctor" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="last-name">Last Name</label> <input type="text" id="last-name" value="p" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="email">Email</label> <input type="email" id="email" value="doctor@gmail.com" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="phone-number">Phone Number</label> <input type="text" id="phone-number" value="1234567890" class="form-control validate"> </div> <div class="md-form col-md-2"> <label data-error="wrong" data-success="right" for="isverified">Is Verified?</label><br/> <input type="checkbox" name="verified" value="verified" checked> </div> <button class="btn btn-default">Update Profile</button> 

Set this code $('input').attr('disabled', false); 设置此代码$('input').attr('disabled', false); on the conditional part of your function, false if button value is edit else true. 在函数的条件部分,如果按钮值为edit,则为false,否则为true。

 $('input').attr('disabled', true); $('select').attr('disabled', true); $('.editbutton').on('click', function(e) { e.preventDefault(); $('select').attr('disabled', false); }) function myFunction() { var btn = document.getElementById("myButton"); if (btn.value == "Edit") { btn.value = "Back"; btn.innerHTML = "Back"; $('input').attr('disabled', false); } else { btn.value = "Edit"; btn.innerHTML = "Edit"; $('input').attr('disabled', true); } } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button id="myButton" onclick="myFunction()" class="btn btn-default editbutton" value="Edit">Edit</button> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="first-name">First Name</label> <input type="text" id="first-name" value="Doctor" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="last-name">Last Name</label> <input type="text" id="last-name" value="p" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="email">Email</label> <input type="email" id="email" value="doctor@gmail.com" class="form-control validate"> </div> <div class="md-form col-md-5"> <label data-error="wrong" data-success="right" for="phone-number">Phone Number</label> <input type="text" id="phone-number" value="1234567890" class="form-control validate"> </div> <div class="md-form col-md-2"> <label data-error="wrong" data-success="right" for="isverified">Is Verified?</label><br/> <input type="checkbox" name="verified" value="verified" checked> </div> <button class="btn btn-default">Update Profile</button> 

const input = $('input');
const button = $('.editbutton');

input.attr('disabled', true);

button.on('click', (event) => {
    event.preventDefault();

    const target = event.currentTarget;

    let value = target.value;

    if(target.value === 'Edit') {
        input.attr('disabled', false);
        target.value = 'Back'

    } else {
        input.attr('disabled', true);
        target.value = 'Edit'
    }

    target.innerHTML = target.value;
});

And remove this onclick="myFunction()" as you don't need it. 并根据需要删除此onclick="myFunction()"

Here is working example https://jsfiddle.net/muzikant/0w3xgrq7/8/ 这是工作示例https://jsfiddle.net/muzikant/0w3xgrq7/8/

You don't need the onclick="myFunction" in the button element. 您在按钮元素中不需要onclick="myFunction" You are adding an event listener via jquery, so you can just use that. 您正在通过jquery添加事件监听器,因此可以使用它。

$('input').attr('disabled', true);  
$('.editbutton').on('click', function(e) {                                                              
    e.preventDefault();
    myFunction();
}

Then change myFunction to change the disable attribute as you click. 然后更改myFunction以更改单击时的禁用属性。

function myFunction() {
var btn = document.getElementById("myButton");
if (btn.value == "Edit") {
    $('input').attr('disabled', false);
    btn.value = "Back";                                                                  
    btn.innerHTML = "Back";
}
else {
    $('input').attr('disabled', true);
    btn.value = "Edit";                                                                  
    btn.innerHTML = "Edit";
}
}

您可能需要prop方法而不是attr方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM