2010-11-16 50 views
3

在C#/ ASP.NET應用程序中,我有一個呈現很像下面的表單(再加上很多,但是這是最重要的):如何在WebKit中輸入INPUT TYPE =「IMAGE」不提交?

<form method="post" action=""> 
<input type="image" name="ctl15" src="cancel.gif" style="border-width:0px;" /> 
    <!-- Server side, the above input is a System.Web.UI.WebControls.ImageButton. --> 
...more extra fluff... 
<input type="submit" name="Button1" value="Proceed" id="Button1" class="button" 
    style="width:59px;" /> 
</form> 

這種形式只是正常工作在Internet Explorer中和Firefox,但在基於WebKit的瀏覽器(Safari和Chrome)中失敗。問題在於,當用戶在輸入字段中按下Enter鍵而不是使用鼠標點擊提交按鈕時,圖像輸入被激活(在這種情況下,對應於取消事件,與「正好相反」 「針對相關用戶界面的行爲是很自然的)。

我想要做的是,在回車按鍵,激活<input type="submit">按鈕而不是<input type="image">,無需通過點擊圖片破提交。我怎樣才能做到這一點?最好以跨瀏覽器的方式,所以我不需要在代碼中更多的特殊情況。

請不要使用jQuery解決方案,因爲這個應用程序沒有使用它(並且爲這樣一個「簡單」事物引入一個全新的庫將變得非常困難) - 股票JavaScript是非常好的。顯然最好的辦法是如果只能用HTML和CSS來完成,但是我對此的可行性有懷疑。

實質上,這個問題在我看來似乎與HTML: Submitting a form by pressing enter without a submit button完全相反。

不幸的是,由於用戶界面的不同部分由不同的類呈現,並保存在單獨的.aspx文件中(具體來說,<input type="image">位於同一位置,<input type="submit">位於另一位置),重新排列生成的HTML中的元素也不是一個可行的解決方案。

回答

1

純JavaScript:

<script type="text/javascript"> 
var SUBMIT_BUTTON_ID = "Button1"; 
window.onload = function(event) { 
    var arrInputs = document.getElementsByTagName("input"); 
    for (var i = 0; i < arrInputs.length; i++) { 
     var oCurInput = arrInputs[i]; 
     if (oCurInput.type == "text") { 
      oCurInput.onkeypress = function(evt) { 
       if (typeof evt == "undefined" || evt == null) 
        evt = window.event; 
       var keyCode = evt.keyCode || evt.which; 
       if (keyCode == 13) { 
        document.getElementById(SUBMIT_BUTTON_ID).click(); 
        return false; 
       } 
       return true; 
      } 
     } 
    } 
} 
</script> 

測試在IE8和Chrome,在所有瀏覽器更好的測試你覺得使用它之前有關。

該代碼將處理文檔中所有文本框的所有onkeypress事件,並且當按下ENTER鍵時,它將模仿單擊提交按鈕並取消對事件的進一步處理以避免衝突。

+0

奇怪......它看起來很有前途,但是當我將它添加到「」元素中並在Safari和Chrome中嘗試相同的功能時,在按Enter鍵時它似乎無法達到onkeypress函數我通過在'if(keyCode == 13)'塊內添加一個elert來證實這一點。 ''沒有指定類型,但是當我用檢查器驗證時,它顯示爲'type:text'。我會更多地考慮它,但任何建議都是值得歡迎的。 – 2010-11-16 10:07:29

+0

@Michael - 嘗試添加警報(oCurInput.name +「 - 」+ oCurInput.type);在這行之後:var oCurInput = arrInputs [i];並看看發生了什麼 – 2010-11-16 11:30:12

+0

現在,我們決定通過簡單地刪除基於WebKit的瀏覽器中提交的圖像來解決問題。不過,我懷疑這是一個永久性的解決方案,所以我稍後可能會重新討論這個問題。感謝您的幫助! – 2010-11-22 13:02:58

相關問題