2013-04-06 14 views
0

我找不到答案。所以,我希望這不是多餘的..

有一個簡單的表單元素:

<label>Email Address:</label> 
<input type="text" onblur="validateEmail(this)" /> 

而且我運行一個驗證腳本來檢查這個輸入值(的onblur)是否有效。很棒!

現在..我想要做的是保持腳本通用 - 所以我不必依靠類名或ID來使它工作。

所以我想知道的是如果該值不是電子郵件地址,該如何對此字段執行操作。具體來說,我想更改標籤的顏色,並在該字段上放置紅色邊框。

下面是不起作用的腳本:

var inputTextTest = field.value; 
var filter = /^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*?)\s*;?\s*)+/; 

if (filter.test(inputTextTest)) { 
    var name = field; 
    $(this).focus(); 
    $(this).css("border","1px"); 
    $(this).css("border-color","red"); 
} else { 
    $(this).css("border", "none"); 
} 

我可以看到我爲$(這)調用是行不通的。那麼,如何在這個特定的領域採取行動,並保持腳本完全通用(即不依賴於特定的類或ID名稱)?

非常感謝您的幫助!

+0

你必須使用突兀的JavaScript? – eomeroff 2013-04-06 20:34:19

+0

'this'的使用與目標元素是否具有名稱無關。可以使用名稱/ ID /類或者只是元素的類型進行選擇,以便可以附加事件處理程序。在一個事件處理程序中,this指的是目標元素。如果選擇器正確並且處理程序在適當的事件發生時運行,那麼選擇器**必須已經完成它的工作。 '這'不關心選擇者允許處理程序被附加。也許是我,但這個問題沒有意義。而且,問題的標題和文本似乎並不一致。 – 2013-04-06 21:21:50

回答

3

我會猜測,參數引用thisfield,因爲你正在使用field.value在頂部有:

validateEmail(field) { 
    var inputTextTest = field.value; 
    var filter = /^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*?)\s*;?\s*)+/; 

    if (filter.test(inputTextTest)) { 
     var name = field.name; 
     $(field).focus().css("border","1px solid red"); 
    } else { 
     $(field).css("border", "none"); 
    } 
} 
+0

爲此投票,就像您檢索價值的方式返回並進行修改。 – eomeroff 2013-04-06 20:36:07

+0

這樣做..謝謝adeneo。我知道這一定是簡單的事情。在onBlur調用中使用「this」是它的唯一功能。像魅力一樣工作。再次感謝。 – 2013-04-07 16:56:06

0

爲了使它通用我建議你使用現有的驗證庫之一:

https://github.com/DiegoLopesLima/Validate#readme

原因$(本)不爲你工作,是因爲它不是定義,您不在回調或創建該引用的函數中。

做一個通用的循環和使用$(本),你需要做這樣的事情:

$('input').each(function() { 
    $(this) // will now reference each element. 
}); 
1

嘗試field而不是this假設函數的聲明看起來像validateEmail(field)

onblur你逝去的this爲對象的功能,但這時需要USEE當你聲明的函數參數

0

放在一個功能腳本,並把對象作爲參數,則對對象執行的一切,你使用的任何PARAM NAME 。