JG10
JG10

Reputation: 19

Don't execute a keydown function if some divs are clicked

My script execute some actions (like stop one audio player) in case the user press the space bar:

$('html').keydown(function(e){
   if(e.keyCode == 32){
       // Stop the audio player
   }
}

But the problem comes when a user tries to write a message in the textarea because the previous function executes (and it's very annoying)... How can I do to not execute the function, in case the user is writing a message on a textarea or other elements?

Upvotes: 0

Views: 109

Answers (6)

Scription
Scription

Reputation: 645

You should check the sender of the event, if the sender is other controls then the audio player then ignore the call, otherwise stop the player.

$('html').keydown(function(e){
   var senderID = $(event.target).attr('id');
   if(senderID == 'myAudioPlayerID' && e.keyCode == 32){
       // Stop the audio player
   }
}

Upvotes: 0

Joonas
Joonas

Reputation: 7303

Something like this:

The code inside the if statement only triggers if you are not focused inside a text area or input.

jsfiddle demo

HTML:

<textarea></textarea>
<input type="text">

jQuery:

var exclude = $("textarea, input");

$('html').on("keydown", function( e ) {

    if ( e.keyCode == 32 && !exclude.is(':focus') ) {
       console.log( 'Space pressed outside input or text area' );
    }

});

Upvotes: 0

WinterCore
WinterCore

Reputation: 101

Try This :)

$('html').keydown(function(e) {
    if(e.keyCode == 32){
        // stop the music player
    }
});
$('input, textarea').keydown(function(e) {
    e.stopPropagation();
});

Upvotes: 0

Syed Fasih
Syed Fasih

Reputation: 312

You need to skip when user is focussing some control, this example will prevent the player to stop if user i typing in a text area.

$(function () {
            $(document).keypress(function (e, f) {

                var tagName = e.target.tagName.toLowerCase();
                if (tagName != 'textarea') {
                    if (e.keyCode == 32) {
                        console.log('Stop Playing');
                    }
                }
            });
        });

Hopw this helps.

Upvotes: 1

Halil Ibrahim
Halil Ibrahim

Reputation: 1369

Use stopPropagation method on event object when space bar pressed on textarea.

$(document).ready(function(){
    $("#testTextArea").keydown(function(e){
       if(e.keyCode == 32){
           e.stopPropagation();
       }
    });

    $("#container").keydown(function(e){
       if(e.keyCode == 32){
           alert('Player Stoped/Started')
       }
    });
})

fiddle : http://jsfiddle.net/b0u3z8pg/16/

Upvotes: 0

VPK
VPK

Reputation: 3090

Try this,

$('#textAreaId').keypress(function(e){
    e.preventDefault();
});

Upvotes: 0

Related Questions