Nasıl basıldığında kullanıcı Enter tuşuna basın veya Gönder düğmesini olmadığını belirlemek PHP edebilir?

5 Cevap php

Ben yaşıyorum sorun ben tek bir formda birden gönderme girişleri olması. Bunların her biri farklı bir değere sahiptir girişleri göndermek ve ben teslim olarak tutmayı tercih ediyorum. Kullanıcı presler girmek zaman üstteki giriş basıldığında ediliyor göndermek ve bu yüzden giriş tıklandığı kod denetimi için sorunlara neden oluyor sanki, öyle. Giriş veya tıklandığında kullanıcı Enter tuşuna basıldığında seçilen sadece giriş oldu olup olmadığını belirlemek için PHP için bir yolu var mı?

5 Cevap

Eğer doğru HTML yapısı sağlanmıştır kullanılan hangi düğme belirleyebilir

<input type="submit" name="action" value="Edit">
<input type="submit" name="action" value="Preview">
<input type="submit" name="action" value="Post">

$_POST dizisi (veya $_GET/$_REQUEST) yürürlüğe düğmesi (tıklandığında ya da değil) değeri ile anahtar "eylem" içerecektir.

Şimdi, "tıklayarak" açıkça bir istemci tarafı davranış - Bir tıklama ve bir tuşa basarak ayırt etmek istiyorsanız, o tespitinde yardımcı olmak için formdaki bazı komut dosyası eklemeniz gerekir.

Edit

Alternatif olarak, "sinsi" olarak kullanabilirsiniz ve bir o doğru bir başvuru için anahtar basılı belirlemelidir göndermek gizli, ancak bu muhtemelen erişilebilirlik bazı önemli etkisi vardır.

<?php

if ( 'POST' == $_SERVER['REQUEST_METHOD'] )
{
    echo '<pre>';
    print_r( $_POST );
    echo '</pre>';
}

?>
<form method="post">

    <input type="text" name="test" value="Hello World">

    <input type="submit" name="action" value="None" style="display: none">
    <input type="submit" name="action" value="Edit">
    <input type="submit" name="action" value="Preview">
    <input type="submit" name="action" value="Post">

</form>

Roberto

PHP sunucu-tarafı teknolojisi ve bu nedenle sunucu üzerinde çalışır - bu yüzden (kullanıcı aka) istemci basıldığında nerede ne anahtarlarını belirlemek için hiçbir yolu yoktur. Eğer özel (form verilerini gönderme de isteği şeklidir) sunucu istekleri ile bu bilgileri içerecek şekilde istemci tarafında kod sürece Yani, tabii ki,.

Bunu başarmak için tek yolu müşteri kodu Javascript kullanarak gereğidir.

See this page as a starting point regarding handling form submit events using Javascript. http://www.w3schools.com/jsref/jsref_onSubmit.asp

You may also have to add a listener for key press events on your page in order to capture the user pressing the Enter key and then recording this information. http://www.howtocreate.co.uk/tutorials/javascript/domevents offers a discussion on the topic of adding/removing event listeners in Javascript but you have to be very careful when using events because improperly used they can be the source of memory leaks which are hard to debug and cause for unhappy users :)

PHP bir sunucu tarafı dil ederken istemci tarafında olur, çünkü yalnız PHP, formu olayı tetiklenmiş göndermek nasıl belirleyemiyor. Sen dinlemek için Javascript uygulamak olurdu - ve sunucu tarafındaki log - anahtar presleri ve fare tıklamaları ve daha sonra verileri aradığınızı bulmak için analiz.

O diğerleri olmayacak form verilerini görünecektir Şimdi, PHP, which giriş tetikledi gönderebilirsiniz söyleyebilirim. Tarayıcıların çoğu ilk bir girdiyi varsayılan (bir Enter tuşuna basın tetiklenir bir) teslim olun. Sen yeniden sipariş tüm gönderir tetiklenir göndermek hangi kontrol etmek olabilir böylece.

PHP gerçekten istemci tarafında ne bilemeyiz.

Ben javascript kullanmanızı tavsiye ediyorum. Kullanıcı eylemi ne zaman, onu yakalamak ve formu ile gönderilmelidir olacak bir gizli bir alanda saklayın. Ayrıca girişin aktif olduğunu ne takip edebilirsiniz ve bir gizli bir alanda saklayın.

Kodu (i sözdizimi işaretli değil) biraz böyle gider

<input type="text" onfocus="setCurrent(this)" id="1" />
<input type="hidden" id="hid" />

function setCurrent(o){
  $('hid').value = o.id;
}

Ben alıcı olaylar ve gizli alanları ile uğraşırken size istediğiniz sonucu verecektir gerektiğini düşünüyorum.

Umut olur

Bu istemci tarafında işaretlemeyi yazmak nasıl.

Örneğin, burada bu yapabileceği bir (non-XHTML) yoludur:

HTML dosyasında:

<form method="post" action="myform.php" id="myform">
  ... form items here ...

<input type="submit" name="enter_key" value="true" style="display:none">
<input type="hidden" name="pressed_button" id="pressed_button" value="false">
<input type="button" value="Submit"
  onclick="document.getElementById('pressed_button').value='true';document.getElementById('myform').submit();">
</form>

Myform.php in:

if ($_POST['pressed_button']=='false') {
   // Logic for enter key
} else {
   // Logic for button press
}