admin管理员组文章数量:1134239
Using jQuery i would like to run a function when either .change()
or .keyup()
are raised.
Something like this.
if ( jQuery(':input').change() || jQuery(':input').keyup() )
{
alert( 'something happened!' );
}
EDIT
Sorry i forgot to mention. Both .change()
and .keyup()
need some of the variables to be in-scope.
Using jQuery i would like to run a function when either .change()
or .keyup()
are raised.
Something like this.
if ( jQuery(':input').change() || jQuery(':input').keyup() )
{
alert( 'something happened!' );
}
EDIT
Sorry i forgot to mention. Both .change()
and .keyup()
need some of the variables to be in-scope.
7 Answers
Reset to default 236You can bind to multiple events by separating them with a space:
$(":input").on("keyup change", function(e) {
// do stuff!
})
docs here.
If you're ever dynamically generating page content or loading content through AJAX, the following example is really the way you should go:
- It prevents double binding in the case where the script is loaded more than once, such as in an AJAX request.
- The bind lives on the
body
of the document, so regardless of what elements are added, moved, removed and re-added, all descendants ofbody
matching the selector specified will retain proper binding.
The Code:
// Define the element we wish to bind to.
var bind_to = ':input';
// Prevent double-binding.
$(document.body).off('change', bind_to);
// Bind the event to all body descendants matching the "bind_to" selector.
$(document.body).on('change keyup', bind_to, function(event) {
alert('something happened!');
});
Please notice! I'm making use of $.on()
and $.off()
rather than other methods for several reasons:
$.live()
and$.die()
are deprecated and have been omitted from more recent versions of jQuery.- I'd either need to define a separate function (therefore cluttering up the global scope,) and pass the function to both
$.change()
and$.keyup()
separately, or pass the same function declaration to each function called; Duplicating logic... Which is absolutely unacceptable. - If elements are ever added to the DOM,
$.bind()
does not dynamically bind to elements as they are created. Therefore if you bind to:input
and then add an input to the DOM, that bind method is not attached to the new input. You'd then need to explicitly un-bind and then re-bind to all elements in the DOM (otherwise you'll end up with binds being duplicated). This process would need to be repeated each time an input was added to the DOM.
Do this.
$(function(){
var myFunction = function()
{
alert("myFunction called");
}
jQuery(':input').change(myFunction).keyup(myFunction);
});
You could subscribe for the change and keyup events:
$(function() {
$(':input').change(myFunction).keyup(myFunction);
});
where myFunction
is the function you would like executed:
function myFunction() {
alert( 'something happened!' );
}
That's not how events work. Instead, you give them a function to be called when they happen.
$("input").change(function() {
alert("Something happened!");
});
Write a single function and call it for both of them.
function yourHandler(e){
alert( 'something happened!' );
}
jQuery(':input').change(yourHandler).keyup(yourHandler);
The change() and keyup() event registration functions return the original set, so they can be chained.
Well here is how I solved it using Jquery
$("#c_debit").on("keyup change", function(e) {
let debitValue = $("#c_debit").val();
if(debitValue != 0)
{
$( "#c_credit" ).prop( "disabled", true );
}
else{
$( "#c_credit" ).prop( "disabled", false );
}
})
本文标签: javascriptjQuery 39if change() or keyup()39Stack Overflow
版权声明:本文标题:javascript - jQuery 'if .change() or .keyup()' - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736817577a1954154.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
need some of the variables to be in-scope
do you mean variables from the event or variables you're using when you're registering these events handlers? You get the event variables in the event parameter (usually namede
), else you might need to keep them at the window level or data on the element until the events are raised, or look at closures. – StuperUser Commented Oct 13, 2011 at 16:48