将Jquery选择器的名称设置为变量中的字符串

时间:2010-10-07 12:00:34

标签: javascript jquery jquery-selectors

我是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 个答案:

答案 0 :(得分:2)

focus事件不会冒泡,请参阅http://www.quirksmode.org/dom/events/blurfocus.html#t06

其他一些问题:

  1. 分配给事件处理程序内部的formName变量与第一行不是同一个变量,因为您重新声明它,它只存在于该事件函数的范围内。
  2. parentsUntil会将所有祖先返回 form元素,而不是元素本身,这可能是您想要的。
  3. 您的代码已脱离上下文,因此很难理解应该如何使用formName和计时器变量以及应该声明它们的位置,但这应该适用于该事件:

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

    :input是一个jQuery选择器,可匹配所有<input>类型,以及<textarea><select>

答案 1 :(得分:0)

focus事件会冒泡,因此您可以使用:

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

但最好在提交时存储您的计时器,例如:

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

也不要在事件处理程序中使用var,因为这将创建一个新的局部变量,设置在其上方声明的formName变量。

答案 2 :(得分:0)

var formName = 0;
$('input').parentsUntil('form', this).focus(function() {var formName = this.name;})

这不起作用。您正在尝试分配第一行中定义的formName变量,但您要在第二行中重新定义变量。实际上,您正在处理两个不同的变量,一个在函数范围内,另一个在全局范围内。

<强>解决方案:

var formName = 0;
$('input').parentsUntil('form', this).focus(function() {formName = this.name;})
//                                                      --- no var here