Reputation: 151
I need to get my buttons to become :active
state when some keyboard button is pressed and not just when clicked.
here is my code... thanks in advance.
Script :
$(document).on('keypress', function (e) {
var tag = e.target.tagName.toLowerCase();
if (e.which === 119 && tag != 'input' && tag != 'textarea')
$('#forward').click();
if (e.which === 115 && tag != 'input' && tag != 'textarea')
$('#back').click();
if (e.which === 97 && tag != 'input' && tag != 'textarea')
$('#left').click();
if (e.which === 100 && tag != 'input' && tag != 'textarea')
$('#right').click();
});
$(function () {
$("#forward").click(function () {
$.ajax('/forward');
});
$("#back").click(function () {
$.ajax('/back');
});
$("#left").click(function () {
$.ajax('/left');
});
$("#right").click(function () {
$.ajax('/right');
});
});
HTML :
<ul class="button-list">
<li>
<button id="forward">W</button>
</li>
<li>
<button id="back">S</button>
</li>
<li>
<button id="left">A</button>
</li>
<li>
<button id="right">D</button>
</li>
</ul>
...................................................................................
Upvotes: 5
Views: 48229
Reputation: 181
$(document).ready(function () {
$("ul > li button").click(function () {
$('ul > li button').removeClass('active');
$(this).addClass('active');
});
});
ul > li button.active{
background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="button-list">
<li>
<button id="forward">W</button>
</li>
<li>
<button id="back">S</button>
</li>
<li>
<button id="left">A</button>
</li>
<li>
<button id="right">D</button>
</li>
</ul>
Upvotes: 3
Reputation: 4656
You have to create a class
which style
is the same of the :active
state of the button
so :
General example
.buttonclass:active , .activated { /* somestyle */ }
$('.buttonclass').on('click', function(){
$(this).addClass('activated'); //eventually removeClass of some previous class
//other stuff
});
Your CODE
CSS
#forward:active, .forwardactivate{}
#back:active, .backactivate{}
Or if you have a ul li button
style
then you have to do:
ul li button:active, .activatebutton {} /* style*/
JAVASCRIPT
$(function() {
$("#forward").click(function() {
$.ajax('/forward');
if($(this).hasClass('forwardactivate'))
$(this).removeClass('forwardactivate'); //change with .activatebutton
else
$(this).addClass('forwardactivate');
});
//etc
});
Upvotes: 8
Reputation: 4619
I dont know what did you mean about "Set Button to .Active" but for example you can trigger its click by this code :
$(document).keypress(function(e){
if(e.keychar == 'w')
{
$("#forward").trigger('click');
//You can do any thing here ex. "set button state Active"
//$("#forward").addClass('active');
}
else if(e.keychar == 's')
$("#back").trigger('click');
else if(e.keychar == 'a')
$("#left").trigger('click');
else if(e.keychar == 'd')
$("#right").trigger('click');
});
Upvotes: 1
Reputation: 2902
can't you add .active class according to the page... say if you are on /forward add .active
to forward... or you can do it like this too:
$("#forward").click(function() {
$.ajax('/forward');
$('button').removeClass('active');
$(this).addClass('active');
});
Upvotes: 0