2010-10-07 57 views
0

我在Jquery是个不错的选择,但我试图根据表单元素的名称设置一个变量。在变量中设置一个JQuery选择器的名称作为字符串

I.e.基于这个例子变量=“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); 
} 

提前感谢!

回答

2

focus事件不会泡沫,看到http://www.quirksmode.org/dom/events/blurfocus.html#t06

夫妇的其他问题:

  1. formName变量被分配到事件处理程序内是不一样的变量作为第一行是因为你'重新声明它,它只存在于该事件函数的范围内。
  2. parentsUntil将返回所有祖先直到form元素,而不是元素本身,这可能是你想要的。

你的代码是断章取义,所以这是很难理解的定时器变量是如何formName,应使用以及它们应该声明,但这应该为事件工作:

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

:input是jQuery选择匹配所有<input>类型,与<textarea><select>

0

focus事件会冒泡,所以你可以用:

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

但它会是更好的存储时,它提交了计时器,例如:

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

也不要” t使用var里面的事件处理程序,因为这会创建一个新的局部变量,而不是设置你的formName变量在它上面声明。

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

此CA一起不工作。您正试图分配给第一行中定义的formName变量,但是您正在第二行中重新定义该变量。你实际上正在处理两个不同的变量,一个在函数范围内,另一个在全局范围内。

解决方案:

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