2011-10-02 83 views

回答

1

解決方案http://jsfiddle.net/vonkly/Z6Jtd/9/

你去那裏。

注:我改變了你的JavaScript一點。我刪除了.fadeOut;我強烈建議爲.focusout()創建一個函數 - 或者更好的辦法是,檢測值的變化,當它匹配所需的規則時,隱藏該消息。


對於未來的讀者:

的解決這個問題是在一個容器中與position: relative;上包裹兩個標記(「點」)和(「消息」)它。

然後,我使用position: absolute;top: 8px定位了標記。

接下來,我將margin-left: 12px添加到消息以便不重疊標記。

CSS

input[type="text"], input[type="password"] { 
    display: inline-block; 
    font: bold 13px Arial; 
    color: #555; 
    width: 300px; 
    padding: 8px 10px; 
    border: 0; 
} 

.notify-wrap { 
    position: relative; 
    display: none; 
} 

.notify-point { 
    position: absolute; 
    top: 8px; 
    display: inline-block; 
    border-style: solid; 
    border-color: transparent rgba(0, 0, 0, 0.75) transparent transparent; 
    border-width: 6px; 
} 

.notify-body { 
    margin-left: 12px; /* push the body out to make room for point */ 
    padding: 8px 10px; 
    font: bold 11px Arial, Helvetica; 
    color: #fff !important; 
    background-color: rgba(0, 0, 0, 0.75); 
} 

注:上面的代碼修改爲不佔用室內負荷與border-radius

HTML

<div id="email"> 
<input name="1" type="text" value="Enter your email address"/> 
    <div class="notify-wrap x1"> 
     <div class="notify-point"></div> 
     <div class="notify-body"> 
      You've entered an invalid email address. 
     </div> 
    </div> 
</div> 

注:上 notify-wrap,我添加了類x1來定義一個特定的錯誤消息,以保持OP原來的javascript格式。

的Javascript(jQuery的)

$('input').focus(function() { 
    var num = $(this).attr('name'); 
    $('div.notify-wrap.x' + num).css('display','inline-block'); 
}); 
+0

非常感謝。我甚至沒有意識到有一個名爲'.focusout()'的事件處理程序,非常感謝! – Avicinnian

+2

不是問題。處理錯誤/警告消息的「最好」*方法是在問題發生時顯示它,並保持顯示狀態,直到問題得到解決。使用'.focus()'和'.focusout()'很好,但是就像UX建議一樣,我會使用它來提供更有幫助的提示或提示的內容,例如:http:// jsfiddle。淨/ vonkly/Z6Jtd/10 /。然後,在您的驗證中,添加一個'。錯誤「類輸入,並使用紅色邊框/樣式進行設置。只是一些建議 - 很高興我可以幫助您解決您的原始問題! – Ben

+0

是的,小提琴並不是我打算做的事情的現實版本,更多的是模擬出測試這些通知類型事物的用法。無論如何,它依賴於CSS3,因此我將使用多個背景圖像將其移至單個「.class」。 :) – Avicinnian