2011-03-08 79 views
1

LLO, 我有了一種形式兩個提交按鈕:一個接受和一個取消:鍵盤通過jQuery提交

<p> 
    <input type="submit" name="accio" value="accept" class="default" /> 
    <input type="submit" name="accio" value="cancel" class="cancel" /> 
</p> 

我想使用jQuery的鍵盤提交表單:

$(document).ready(function() { 
    $("input[type=text]").focus(); 
    $("input[type=text]").keydown(function(e) { 
      if ((e.keycode && e.keycode == 13) || (e.which && e.which == 13)) { 
       $(".default").submit(); 
      } 
      if ((e.keycode && e.keycode == 27) || (e.which && e.which == 27)) { 
       $(".cancel").submit(); 
      } 
     }); 
}); 

我希望參數accio包含接受或取消取決於按下的鍵(我在服務器中處理它)...它在Firefox中工作,但不在IE或Chrome中。我的錯在哪裏?

更新

繼@森那的,我得到了下面的代碼:

$(document).ready(function() { 
    $("input:text").focus(); 
    $("input:text").keydown(function(e) { 
      if (e.which == 13) { 
       $("#default").submit(); 
      } 
      if (e.which == 27) { 
       $("#cancel").submit(); 
      } 
     }); 
}); 

,但它仍然沒有工作......我認爲這是與我提交表單的方式......能」 t我在「input:submit」上調用submit方法,並期望將正確的值傳遞給控制器​​?

+0

@Charles更好:'輸入:text' – 2011-03-08 16:54:35

+0

@Charles而且,你不必做事件對象這些測試。 jQuery確保'e.which'可用。 – 2011-03-08 16:56:20

+0

@Charles另外,您確定要提交一整類對象嗎? – 2011-03-08 16:58:16

回答

3

試試這個:

$("input[type=text]").keydown(function(e) { 
    if ((e.keycode && e.keycode == 13) || (e.which && e.which == 13)) { 
     $(".default")[0].click(); 
    } 
    if ((e.keycode && e.keycode == 27) || (e.which && e.which == 27)) { 
     $(".cancel")[0].click(); 
    } 
}); 

你可以把一個方法來更好地識別按鈕。

$("p input.cancel") 

UPDATE:

$(document).ready(function() { 
    $("input:text").focus(); 
    $("input:text").keydown(function(e) { 
      if (e.which == 13) { 
       $("#default")[0].click(); 
      } 
      if (e.which == 27) { 
       $("#cancel")[0].click(); 
      } 
     }); 
}); 

see this example

UPDATE II

這個代碼泛函以及在IE6 +,修正是在stopPropagation

$('input[type="text"]').keydown(function(ev) { 

    if (ev.which == 13 || ev.which == 27) { 

     ev.stopPropagation(); 
     if (ev.which == 13) 
     $("#default")[0].click(); 

    if (ev.which == 27) 
     $("#cancel")[0].click(); 

     return false 
    } 

}); 
+0

仍然不能正常工作......在第一種情況下(輸入按下),我爲accio參數獲得空值,表單清除它的值,但在第二種情況下沒有任何提交(轉義鍵)。謝謝。 – 2011-03-08 17:16:57

+0

差不多!現在它適用於取消按鈕,但不適用於默認的... – 2011-03-08 17:19:52

+0

有什麼區別黑/白e.which和e.keycode? – 2011-03-08 17:23:37

0

嘗試以下操作:

$('#myForm').submit(); 
$('#mySubmitButton').click(); 
+0

這不適合我...謝謝。 – 2011-03-08 17:14:49