Reputation: 563
I'm trying to do something similar to a linkedin profile page where users can edit information instantly. Is there any better way to write this script? I'm thinking to use this for all editable items on the same page. Basically what it does so far is to hide the preview field & show the form where users can edit information & save it.
$('.editable-field .edit-info').click(function(){
$(this).parents().eq(1).find('.view-text').removeClass('show').addClass('hide')
$(this).parents().eq(1).find('.edit-text').removeClass('hide').addClass('show');
});
$('.cta-btn .cancel').click(function(){
$(this).parents().eq(1).removeClass('show').addClass('hide');
$(this).parents().eq(2).find('.view-text').removeClass('hide').addClass('show');
});
$('.cta-btn .save').click(function() {
//save value here
$(this).parents().eq(1).removeClass('show').addClass('hide');
$(this).parents().eq(2).find('.view-text').removeClass('hide').addClass('show');
});
HTML structure
<div class="editable-field">
<a class="edit-info">Edit</a>
<div class="view-text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod</p>
<div class="month">August</div>
</div>
<div class="edit-text hide">
<form class="text-field">
<textarea>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod</textarea>
<select id="month" name="month"/ >
<option>Jan</option>
</select>
</form>
<div class="cta-btn">
<button class="save">Save Changes</button>
<button class="cancel">Cancel</button>
</div>
</div>
</div>
Upvotes: 0
Views: 51
Reputation: 3112
You could use .parents('.editable-field')
, .siblings
and toggle
to shorten it to the below. .toggle()
will hide a visible element and show a hidden one one. If that is all your show
and hide
classes do I would recommend using that instead. -
$('.editable-field .edit-info').click(function() {
edit($(this));
});
$('.cta-btn .cancel').click(function() {
edit($(this));
});
$('.cta-btn .save').click(function() {
//save value here
$('.view-text p').text($('.edit-text textarea').val());
edit($(this));
});
function edit($this) {
$this.parents('.editable-field').find('.view-text').toggle()
.siblings('.edit-text').toggle();
}
.show {
display: block;
}
.hide {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="editable-field">
<a class="edit-info">Edit</a>
<div class="view-text">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod</p>
<div class="month">August</div>
</div>
<div class="edit-text hide">
<form class="text-field">
<textarea>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod</textarea>
<select id="month" name="month" />
<option>Jan</option>
</select>
</form>
<div class="cta-btn">
<button class="save">Save Changes</button>
<button class="cancel">Cancel</button>
</div>
</div>
</div>
Upvotes: 1