我是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);
}
提前致谢!
答案 0 :(得分:2)
focus
事件不会冒泡,请参阅http://www.quirksmode.org/dom/events/blurfocus.html#t06
其他一些问题:
formName
变量与第一行不是同一个变量,因为您重新声明它,它只存在于该事件函数的范围内。parentsUntil
会将所有祖先返回 form
元素,而不是元素本身,这可能是您想要的。您的代码已脱离上下文,因此很难理解应该如何使用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