我正在嘗試更改我網站的一部分功能。 目前,我有一個在我的表格外的驗證按鈕。只要用戶點擊該按鈕,就會發生驗證。JavaScript - 'this.form'返回undefined
但是,我改變了這種方式,驗證按鈕將被刪除,功能將被移動到位於表格內的鏈接按鈕。
下面是我對這段代碼:
<table width="100%" cellpadding="4">
<tr>
<td valign="top">
//something else here
</td>
<td valign="top" align="right">
<asp:GridView ID="myGridView" runat="server" OnRowDataBound="myGridView_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Column 1">
<ItemTemplate>
// some control
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Column 2">
<ItemTemplate>
// some control
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Column 3">
<ItemTemplate>
// some control
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Column 4">
<ItemTemplate>
<asp:LinkButton ID="lbValidate" runat="server" Text="Validate" OnClientClick="return MyValidation__Submit(this.form)" CausesValidation="true" OnClick="btnValidate_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
<div style="margin:10px 0px 10px 0px;">
<asp:Button ID="btnValidate" runat="server" Text="Validate" OnClientClick="return MyValidation__Submit(this.form)" CommandArgument="Save" CausesValidation="true" OnClick="btnValidate_Click" />
</div>
這裏是JavaScript塊,確實驗證的樣本:
<script type="text/javascript">
function MyValidation__Submit(formName) {
alert("Test :" + formName);
// do validations
var joForm = document.getElementById(formName.id);
for (var i = 0; i < joForm.elements.length; i++) {
// do something
}
return true;
}
</script>
這工作得很好驗證按鈕被點擊時,但不在LinkButton上。 爲了測試它,我不得不把alert("Test :" + formName);
行。每當我啓動驗證按鈕時,系統警報都會返回一個字符串值「[object HTMLFormElement]」,我認爲這樣做是可以的,因爲它按照我希望的方式工作。但是,當我嘗試啓動駐留在表內的Validate LinkButton時,系統警報返回「未定義」,使得我的整個驗證代碼無用。
有人請指出我在這裏失蹤了什麼?我猜測它與控件的層次結構有關,因爲這是唯一被改變的東西。
謝謝!
編輯:
這是最遠的,我可以去,但我仍然不能得到的形式。 此人返回HTMLDivElement
。
<asp:LinkButton ID="lbValidate" runat="server" Text="Validate" OnClientClick="return MyValidation__Submit(this.parentNode.parentNode.parentNode.parentNode.parentNode)" CausesValidation="true" OnClick="btnValidate_Click"></asp:LinkButton>
是的,你讀得對。它有5 .parentNode
。
我們可以看到您的驗證碼嗎?你是否期待表單的實際名稱作爲參數'formName'?如果是這樣,你會想''MyValidation__Submit(this.form.name)'而不是簡單'this.form' – crush
請看我上面的編輯。基本上,我使用'formName'來獲取ID。我無法真正改變這個驗證的參數,因爲它是一個現有的函數,它可能會使其他模塊也使用它。 – Smiley
問題是編寫ASP來生成你想要的HTML(然後顯示詢問而不是最終結果),還是隻是生成的HTML和JS交互的方式(在這種情況下,向我們展示生成的HTML ,而不是ASP)? – Quentin