How to know input indirect change? - javascript

I use jQuery to know my input changes .
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#id_back_ground_color").change(function(){
alert("hello");
});
$("#salam").click(function(){
alert("hey");
$("#id_back_ground_color").val('changed!');
});
});
</script>
</head>
<body>
<input id="id_back_ground_color" type="text">
<button id="salam" >
</body>
</html>
When I click on the button I get a "hey" alert but I don't get the "hello" alert. Why?

There's no link between a click on the button and an edit in the id_back_ground_color field.
The change event is sent to an element when its value changes. This
event is limited to elements, boxes and
elements. For select boxes, checkboxes, and radio buttons, the event
is fired immediately when the user makes a selection with the mouse,
but for the other element types the event is deferred until the
element loses focus.
From http://api.jquery.com/change/

Change this line
$("#id_back_ground_color").val('changed!');
to this
$("#id_back_ground_color").val('changed!').trigger( "change" );

Related

How to fires onClick event before onChange (even if the value has changed)?

Hello everyone and sorry for my english.
Following this jdfiddle, I have a problem I don't understand.
First I change the value of the input, then I click on the button and what I expected to see is "click" but I see "change" meaning onclick is called after onchange.
<input type="text" onChange="alert('change')" />
<button type="button" onClick="alert('click');">Click!</button>
I found on this post that it's because of chrome which fires onchange event before the onclick event. But I don't really have the same need as this post because my event are not declared in the same tag. And secondly, if I click on the button I would like to only execute the onclick function and not onclick and then onchange (this methods consists in using onMouseDown).
Do you have a good method to do that?
Ok so I can see that you really wan't this.
You could let the on change function run first, and then afterward see what has focus, if it is that button, you would know that it was clicked, and thus was the reason for loosing focus.
you cannot check this while the change function is running, as the body still has focus at this time..
<head>
<script language="javascript">
function focussed()
{
var triggerElement = document.activeElement
alert(triggerElement)
console.info(triggerElement)
}
function change()
{
alert("change")
setTimeout(focussed, 1)
return true
}
</script>
</head>
<body>
<input type="text" onChange="alert('change')" />
<button type="button" onClick="alert('click');">Click!</button>
</body>

Calling the click function for button in jQuery

I am very new to jQuery and HTML. I am trying to create a button in html that uses jQuery to make the button to prompt alert message when clicked (rather than using onclick in html). In other words, I would like to use the jquery to call up the click function for the button and then return a pop up message.
I have my input type as "button" and my value as "Check" for my button in html.
Here's my code in javascript
$(document).ready(function(){
$("button").click(function(){
alert("Pop Out");
});
but nothing is showing up
Here's a fiddle to my code
http://jsfiddle.net/0ynbv233/8/
I have my input type as "button"
Like this?
<input type="button" />
In that case, this won't work:
$("button")
That selector is looking for button elements, not input elements. You can change the element:
<button />
or you can change the selector:
$('input[type="button"]')
I did what you have done and it worked for me.
Here is what my code was.
$(function(){
$("button").click(function () {
alert("Pop Out");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button>Click Me</button>
Hope you figure out what you are doing wrong.

Ajax function with multiple buttons for a .click event

I have a form with two buttons that have the same name and id (don't ask me why, I didn't create the form lol). I am trying to use Ajax .click function to run when the buttons are clicked. However, the function is only working with the "Approve" button and not the "Forward" button. Is there anyway to call this function from the Forward button?
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#btnApprove").click(function(){
alert("Button was clicked.");
});
});
</script>
</head>
<body>
<input type="submit" name="btnSubmit" id="btnApprove" value="Approve" tabindex="1102" />
<input type="submit" name="btnSubmit" id="btnApprove" value="Forward" tabindex="1102" />
</body>
</html>
I modified the code from http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_click
IDs must be unique. Even if they aren't unique, jQuery only selects the first occurence.
You should change the IDs to be unique.
But anyway, you select per name instead:
$("input[name=btnSubmit]").click(function(){
alert("Button was clicked.");
});
No two elements on a page should have the same id.
$("#btnApprove") maps the the native document.getElementById method which returns the first instance of an element of that id, so the event is only being bound to the first button
add a class attribute to both buttons, putting them in the same class
then you should be able to do something like
$('.NameOfClassHere').click(function(){
or
$('.NameOfClassHere').live('click', function () {
This will work for the click event of all buttons in that class, so saves you from using duplicate code. Also, agreed that you should not use duplicate IDs. Hopefully this helps.

When an input button field is added to the page using jQuery, how to access values

I have generated input button fields based on values inputted elsewhere in the page
$('#saved_answers').prepend('<input type="button" name="remove_answer" value="' + answerstring + '"><br />');
Afterwards, I tried calling:
$("input:button[name=remove_answer]").click(function() {
alert("Test!");
});
But nothing happens. When I view source, I also notice that none of the new code shows up. However, it does show up visually in the window.
You should use the jQuery on method rather than click, so something like
$('#saved_answers').on('click', 'some selector for your newly added button', function(){
alert("Test!");
}
This will allow for the event to be attached correctly.
See jQuery .on method
If you use this it should work:
<html>
<head>
</head>
<body>
<div id="saved_answers"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
$(function(){
$('#saved_answers').prepend('<input type="button" name="remove_answer" value="test" />');
$('#saved_answers').on('click', 'input:button[name=remove_answer]', function(){
alert($(this).val());
});
});
</script>
</body>
</html>
Correct me if I misunderstood your question. What you did is binding an event handler to the click event,
$("input:button[name=remove_answer]").click(function () {
alert("Test!");
});
if you want to trigger the click event, you need this
$("input:button[name=remove_answer]").click();

Error in html file with Javascript onBlur event

I'm reading a tutorial of Javascript, I'm making a html file with a javascript function with a box, the fact is that the alert does not show what goes into the text field, what am I doing wrong ?, this is my code. I'm not entirely clear, how it handles the event onBlur, someone explain more about it? as in the tutorial the only explanation they give is "Losing the focus control," I don't know what they mean by the word focus, or how it is handled the text box, without enter botton.
<html>
<head>
<script>
function show ()
{
var age= parseInt (cage.value);
if (age<=18)
alert("access denied");
else
alert("Welcome");
}
</script>
<title> New Page I </title>
</head>
<body>
Age:
<input type="text" id "cage" name="cage" size="10"
onBlur=show();>
</body>
</html>
The onBlur event fires when the current control loses focus. When a control has focus, meaning that it's currently "selected", things that can cause it to lose focus include clicking on another control or pressing the tab key.
The reason your method does not work properly is because it has a small error. Try this:
<html>
<head>
<script>
function show(el)
{
var age = parseInt(el.value);
if (age<=18)
alert("access denied");
else
alert("Welcome");
}
</script>
<title> New Page I </title>
</head>
<body>
Age:
<input type="text" id="cage" name="cage" size="10" onBlur="show(this);" />
</body>
</html>
You have to use () after function name and look up the element first and then retrieve the value from it.. here is sample code.. (should work, not tested)
function show(){
var age = document.getElementById('cage').value;
if (parseInt(age, 10)<=18)
alert("access denied");
else
alert("Welcome");
}
the onBlur event is fired when you click on anything other than the input box (e.g. clicks another one, or click on a link to something). Basically, if you can't type in the input field, it does not have focus.
As for why it's not working, see #Teja Kantamneni 's answer, which should make it work.
You can getting an error because you are missing the parentheses() after the function declaration. Even if you have a function with no parameters must include the parentheses () after the function name.
Focus is when a form element receives control, so you can type in it or change options of a dropdown. Like onBlur there is also an onFocus event.
Focus is generally set on page load. so when the page is loaded so user does not have to go and click on the first field they need to fill in.
In this example you can have:
Javascript
function setFocus(){
document.getElementById('cage').focus();
}
HTML
<body onLoad="setFocus();">

Categories

Resources