Установите имя селектора Jquery в виде строки в переменной - PullRequest
0 голосов
/ 07 октября 2010

Я довольно новичок в Jquery, но я пытаюсь установить переменную на основе имени элемента формы.

т.е. переменная = "someForm" на основе этого примера:

<form id="hello" name="someForm" >
First name: <input type="text" name="firstname" />
Last name: <input type="text" name="lastname" />
Email: <input type="text" name="email" />
<input type="submit" value="Subscribe" />
</form>

Я использую следующий код, который не работает:

var formName = 0;
$('input').parentsUntil('form', this).focus(function() {var formName = this.name;})
if (stTime == 0) { // This ensures someone cannot start a form multiple times
    var stTime = new Date();
    stDelay = stTime - loTime;
    alert(formName);
}

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 07 октября 2010

Событие focus не будет пузыриться, см. http://www.quirksmode.org/dom/events/blurfocus.html#t06

Пара других проблем:

  1. Переменная formName, назначаемая внутри обработчика события, isn 't та же самая переменная, что и в первой строке, поскольку вы повторно объявили ее, тогда она существует только внутри области действия этой функции события.
  2. parentsUntil вернет всех предков до элемента form, а не самого элемента, который, по-видимому, является тем, что вам нужно.

Ваш код находится вне контекста, поэтому трудно понять, как formName и переменные таймерадолжны использоваться и где они должны быть объявлены, но это должно работать для события:

$('form :input').focus(function() {
    formName = $(this).parents('form').attr('name');
});

:input - это селектор jQuery, который соответствует всем <input> типам, наряду с <textarea> и <select>

0 голосов
/ 07 октября 2010
var formName = 0;
$('input').parentsUntil('form', this).focus(function() {var formName = this.name;})

Это не может работать.Вы пытаетесь назначить переменную formName, определенную в первой строке, но вы переопределяете переменную во второй строке.На самом деле вы имеете дело с двумя разными переменными, одна из которых находится в области функций, а другая в глобальной области.

0 голосов
/ 07 октября 2010

Событие focus будет пузыриться, поэтому вы можете просто использовать:

$('form').focus(function() {
  formName = this.name;
});

Но было бы лучше сохранить таймер при отправке, например:

$('form').submit(function() {
  formName = this.name;
});

Также не используйте var внутри обработчика событий, так как это создаст новую локальную переменную, не установит вашу переменную formName, объявленную над ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...