You can add inputs
for name and age next to span
tag and hide them first when your page gets load . Then ,whenever your edit
button gets clicked you can check if the text is Edit
if yes you can show the inputs-box
and hide span
tag and change your edit button to save
button .So , if user clicked on save
button you can grab both input values and send it to backend using form
submit or ajax call .
Nextly , when edit
button gets clicked you can show cancel
button(optional) as well so if user clicked on cancel button then no changes will be made and inputs
will get hidden.
Demo Code :
$(".form-group input").hide() //hide inputs
//on click ofedit button
$(".edit_save").click(function() {
var selector = $(this).closest(".form-group")
var btnText = $(this).text();
if (btnText === 'Edit') {
$(this).text('Save');
$(this).next("button").show(); //hide
selector.find("form span").hide() //span hide
selector.find("form input").show() //show inputs
} else {
$(this).text('Edit');
$(this).next("button").hide();
selector.find("form span").show()
selector.find("form input").hide()
//get values from input box which is edited
var name = selector.find("input[name=name]").val();
var age = selector.find("input[name=age]").val()
//your ajax call put here to send both values and some id to identify record whwere to update...
//put updated values in span again add this inside success fn of ajax call
selector.find("span.names").text(name)
selector.find("span.ages").text(age)
//or submit from here using $(this).closest("form").submit();
//this will submit form with input value to your backed don't forget to add action to form also some hidden input to identify record.
}
});
$('.cancel').click(function() {
var selector = $(this).closest('form')
//get span values
var names = selector.find("span.names").text()
var ages = selector.closest('form').find("span.ages").text()
$(this).hide(); //hide cancel buton
$(this).prev(".edit_save").text('Edit'); //change text
selector.find("span").show() //hide & Show
selector.find("input").hide()
selector.find("input[name=name]").val(names);
selector.find("input[name=age]").val(ages)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<div class="form-group">
<form class="form-horizontal" style="bg-light">
<t>
<button type="button" class="edit_save" class="btn btn-primary">Edit</button>
<!--added this button-->
<button class="cancel" type="button" class="btn btn-primary" style="display:none">Cancel</button>
<button class="health_profile" type="submit" class="btn btn-primary">Health Profile</button>
</t>
<h3 style="padding-top: 30px; padding-bottom: 45px; text-align: center; font-family: 'sans-serif'; font-weight: bold;" class="text-secondary">HEALTH RECORD</h3>
<div style="padding-bottom:1px;" class="col-md text-md-left">
<label class="text-secondary"><strong>Name:</strong></label>
<span t-field="hr.partner_id" class="input names" title="Name">Abc</span>
<!--added input here you can use t-att-value="hr.partner_id" same for other fields-->
<input type="text" name="name" value="Abc" />
</div>
<div class="col-md text-md-left">
<label class="text-secondary"><strong >Age:</strong></label>
<span t-field="hr.age" class="input ages" title="Age">20</span><input type="text" name="age" value="20" />
</div>
</form>
</div>
<div class="form-group">
<form class="form-horizontal" style="bg-light">
<t>
<button type="button" class="edit_save" class="btn btn-primary">Edit</button>
<button class="cancel" type="button" class="btn btn-primary" style="display:none">Cancel</button>
<button class="health_profile" type="submit" class="btn btn-primary">Health Profile</button>
</t>
<h3 style="padding-top: 30px; padding-bottom: 45px; text-align: center; font-family: 'sans-serif'; font-weight: bold;" class="text-secondary">HEALTH RECORD</h3>
<div style="padding-bottom:1px;" class="col-md text-md-left">
<label class="text-secondary"><strong>Name:</strong></label>
<span t-field="hr.partner_id" class="input names" title="Name">Mno</span><input type="text" name="name" value="Mno" />
</div>
<div class="col-md text-md-left">
<label class="text-secondary"><strong >Age:</strong></label>
<span t-field="hr.age" class="input ages" title="Age">23</span><input type="text" name="age" value="23" />
</div>
</form>
</div>
<div class="form-group">
<form class="form-horizontal" style="bg-light">
<t>
<button type="button" class="edit_save" class="btn btn-primary">Edit</button>
<button class="cancel" type="button" class="btn btn-primary" style="display:none">Cancel</button>
<button class="health_profile" type="submit" class="btn btn-primary">Health Profile</button>
</t>
<h3 style="padding-top: 30px; padding-bottom: 45px; text-align: center; font-family: 'sans-serif'; font-weight: bold;" class="text-secondary">HEALTH RECORD</h3>
<div style="padding-bottom:1px;" class="col-md text-md-left">
<label class="text-secondary"><strong>Name:</strong></label>
<span t-field="hr.partner_id" class="input names" title="Name">Xyz</span><input type="text" name="name" value="Xyz" />
</div>
<div class="col-md text-md-left">
<label class="text-secondary"><strong >Age:</strong></label>
<span t-field="hr.age" class="input ages" title="Age">10</span><input type="text" name="age" value="10" />
</div>
</form>
</div>
Note : You just need to add input with value i.e : t-att-value="yourvalue"
or value="yourvalue"
i have not use odoo before but one of them should work . Also, make sure to add hidden input inside form which will differentiate each datas i.e : some id which is unique for each record so that it would help you to update your data at backend.