2010-10-07 53 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