Как вы определяете, какой ввод формы сосредоточен с помощью JavaScript или jQuery?
Внутри функции я хочу иметь возможность определить, какой фокус ввода имеет фокус. Я хотел бы иметь возможность сделать это в прямом JavaScript и/или jQuery.
Как вы определяете, какой ввод формы сосредоточен с помощью JavaScript или jQuery?
Внутри функции я хочу иметь возможность определить, какой фокус ввода имеет фокус. Я хотел бы иметь возможность сделать это в прямом JavaScript и/или jQuery.
Я не уверен, что это самый эффективный способ, но вы можете попробовать:
var selectedInput = null;
$(function() {
$('input, textarea, select').focus(function() {
selectedInput = this;
}).blur(function(){
selectedInput = null;
});
});
document.activeElement
, он поддерживался в IE в течение длительного времени, а также поддерживаются последние версии FF и chrome. Если ничто не имеет фокуса, оно возвращает объект document.body
.
Если все, что вы хотите сделать, это изменить CSS для определенного поля формы, когда он становится фокусом, вы можете использовать селектор CSS: "focus". Для совместимости с IE6, который не поддерживает это, вы можете использовать библиотеку IE7.
В противном случае вы можете использовать события onfocus и onblur.
что-то вроде:
<input type="text" onfocus="txtfocus=1" onblur="txtfocus=0" />
а затем что-то вроде этого в вашем javascript
if (txtfocus==1)
{
//Whatever code you want to run
}
if (txtfocus==0)
{
//Something else here
}
Но это был бы мой способ сделать это, и это может быть не очень практично, если у вас есть, скажем, 10 входов:)
Я бы сделал это следующим образом: я использовал функцию, которая вернула бы 1, если идентификатор отправленного элемента был тем, который инициировал бы мое событие, а все остальные вернули бы 0, а оператор "if" затем просто провалится и ничего не сделает:
function getSender(field) {
switch (field.id) {
case "someID":
case "someOtherID":
return 1;
break;
default:
return 0;
}
}
function doSomething(elem) {
if (getSender(elem) == 1) {
// do your stuff
}
/* else {
// do something else
} */
}
Разметка HTML:
<input id="someID" onfocus="doSomething(this)" />
<input id="someOtherID" onfocus="doSomething(this)" />
<input id="someOtherGodForsakenID" onfocus="doSomething(this)" />
Первые два будут делать событие в doSomething, последнее не будет (или будет делать предложение else, если оно не выполнено).
-Tom
Вот решение для text/password/textarea (не уверен, что я забыл других, которые могут получить фокус, но их можно было легко добавить, изменив предложения if... в дизайне можно было бы улучшить, поставив if тело в своей собственной функции, чтобы определить подходящие входы, которые могут получить фокус).
Предполагая, что вы можете полагаться на пользователя, играющего в браузере, который не является доисторическим (http://www.caniuse.com/#feat=dataset):
<script>
//The selector to get the text/password/textarea input that has focus is: jQuery('[data-selected=true]')
jQuery(document).ready(function() {
jQuery('body').bind({'focusin': function(Event){
var Target = jQuery(Event.target);
if(Target.is(':text')||Target.is(':password')||Target.is('textarea'))
{
Target.attr('data-selected', 'true');
}
}, 'focusout': function(Event){
var Target = jQuery(Event.target);
if(Target.is(':text')||Target.is(':password')||Target.is('textarea'))
{
Target.attr('data-selected', 'false');
}
}});
});
</script>
Для доисторических браузеров вы можете использовать более уродливый:
<script>
//The selector to get the text/password/textarea input that has focus is: jQuery('[name='+jQuery('body').data('Selected_input')+']')
jQuery(document).ready(function() {
jQuery('body').bind({'focusin': function(Event){
var Target = jQuery(Event.target);
if(Target.is(':text')||Target.is(':password')||target.is('textarea'))
{
jQuery('body').data('Selected_input', Target.attr('name'));
}
}, 'focusout': function(Event){
var Target = jQuery(Event.target);
if(Target.is(':text')||Target.is(':password')||target.is('textarea'))
{
jQuery('body').data('Selected_input', null);
}
}});
});
</script>
Try
window.getSelection().getRangeAt(0).startContainer
Вам нужен только один прослушиватель, если вы используете событие bubbling (и привязываете его к документу); одна за форму разумна, хотя:
var selectedInput = null;
$(function() {
$('form').on('focus', 'input, textarea, select', function() {
selectedInput = this;
}).on('blur', 'input, textarea, select', function() {
selectedInput = null;
});
});
(Может быть, вы должны переместить переменную selectedInput в форму.)
Вы можете использовать этот
<input type="text" onfocus="myFunction()">
Он запускает функцию при фокусировке ввода.