2014-06-08 40 views
0

我正在更新/設計網站,因此我使用了自定義提交按鈕來登錄表單。但是點擊提交時不帶任何有效輸入的造型完全改變其位置跳躍:jQuery驗證按鈕樣式在提交時發生變化

問題: http://test.theobaart.com/ReWork/loginIssue.png

真人版可以看出here,我使用的插件是jQuery驗證(jqueryvalidation。 ORG)

相關的代碼如下:

HTML:

<form id="createForm" method="post" action="create.php"> 

    <label for="email">Email</label> 
    <input id="email" type="email" name="email"/> 

    <label for="password">Password</label> 
    <input id="password" type="password" name="password"/> 

    <input class="submit" type="submit" value="Login"/> 
</form> 

CSS:

/* Login form stuff */ 
form { 
    width: 100%; 
    margin: 0 auto; 
} 

label, input { 
    display: inline-block; 
} 

label { 
    width: 30%; 
    text-align: right; 
} 

label + input { 
    width: 60%; 
    margin: 10px 0 10px 4%; 
} 
/* Styling for input button */ 
input + input { 
    width: 20%; 
    max-width: 100px; 
    margin: 0 40% 10px 40%; 
    -webkit-border-radius: 0; 
    -moz-border-radius: 0; 
    border-radius: 0px; 
    font-family: Arial; 
    color: #a6afb9; 
    font-size: 21px; 
    background: #fffffff; 
    padding: 10px 10px 10px 10px; 
    border: solid #5f6f81 2px; 
    text-decoration: none; 
} 

input + input:hover { 
    background: #5f6f81; 
    text-decoration: none; 
} 
#loginForm div.error { 
    width: 100%; 
    text-align: center; 
    color: red; 
} 

超越進口jquery.validate.min.js我也用下面的腳本:

$("#loginForm").validate({ 
    errorElement: 'div', 
    rules: { 
     email:{required:true}, 
     password: {required: true} 
    } 
}); 

我有點送行無所適從,可能是什麼(所以爲什麼我問這裏)並且,據我所知,這不是一個普遍的問題,所以我一直無法找到任何與stackoverflow/google相關的內容。任何和所有的幫助表示讚賞!

非常感謝,

西奧

附:在我發佈之前,在最後一分鐘進行雙重檢查。這似乎只發生在底部字段(密碼)無效時。當它只是無效的電子郵件字段時,不會發生樣式更改。

+0

你可以把一個jsfiddle放在一起嗎?我會說,當你在驗證中添加div時,你會搞亂這些樣式。順便說一句,使用現代瀏覽器,您可以在需要的字段中使用「required」,然後使用JS退回其他瀏覽器。 –

+1

@Mark Robson。可以找到jsfiddle ** [這裏](http://jsfiddle.net/CQmGE/)**。我爲'errorElement'設置div的原因是因爲我希望可能出現驗證錯誤消息出現在下一行,而不是輸入元素之後。根據另一個stackoverflow問題([這裏](http://stackoverflow.com/questions/14666852/jquery-form-validation-css-of-error-label)加入'errorElement:'div''解決了這個問題。 –

回答

0

我相信這個問題與你用於輸入樣式的css直接兄弟選擇器(+)有關。這樣做是選擇緊跟在另一個輸入元素之後的所有輸入。

/* Styling for input button */ 
input + input { 
    /* your styling */ 
} 

所以被提交表格之前,你的HTML看起來像下面,所以你的CSS似乎正常工作。提交按鈕正在被樣式化,因爲它直接跟在另一個輸入元素之後。

Html before submitted

您提交表格後,jQuery驗證被插入一些節點在HTML之間:

Html after submitted

按鈕不再稱呼,因爲你的CSS選擇器input + input不再適用於它。正如你所指出的那樣,只有在密碼字段不正確的情況下才會出現按鈕變爲無版式的問題,這與此一致。

你應該做的是隻使用一個CSS類樣式的按鈕,如:

HTML:

<input class="submit createButton" type="submit" value="Login" /> 

CSS:

.createButton { 
    width: 20%; 
    max-width: 100px; 
    margin: 0 40% 10px 40%; 
    -webkit-border-radius: 0; 
    -moz-border-radius: 0; 
    border-radius: 0px; 
    font-family: Arial; 
    color: #a6afb9; 
    font-size: 21px; 
    background: #fffffff; 
    padding: 10px 10px 10px 10px; 
    border: solid #5f6f81 2px; 
    text-decoration: none; 
} 

的jsfiddle: http://jsfiddle.net/CQmGE/1/

+0

謝謝對於這個建議我已經在我的網站和** [jsfiddle](http://jsfiddle.net/M98pL/5/)**上實現了它,但是這個問題似乎還存在。 –

+0

我注意到我放錯了位置在我第一次回答時,我已經更新了我的答案,以解決這個問題,並且我發佈了jsfiddle鏈接。 – Nile

+0

讓我感到尷尬的是,我沒有注意到這一點,但這的確有訣竅:)。非常感謝! –