それを解決する3つの方法があります:
- 最大情報をフロントエンドに転送する
- ユーザーが送信するタイミングを確認する
-
Jquery
などの非同期データチェック ajax
最大情報をフロントエンドに転送する
最大情報を非表示の領域に配置し、JavaScriptを使用して取得して確認します。
function check(obj){
var max = obj.getAttribute("data-max");
if(parseInt(obj.value) > parseInt(max)){
alert("Amount out of max!");
}
}
<input name="amount" value="0" data-max="3" onkeyup="check(this);"/>
ただし、この方法はお勧めしません ユーザーはソースコードをチェックすることでストレージデータを取得できるため、避ける必要があります。
ユーザーが送信するタイミングを確認する
サーバー側で最大値で金額を確認すると、ユーザーエクスペリエンスが低下します。
非同期データチェック
これは主に推奨され、使用されており、データを非同期的に取得します。 jquery
を試すことができます 。
サーバー側の言語がphp
であると仮定します 、ファイルを作成できますcheckMax.php
:
<?
$amount = $_POST["amount"];
$item_id = $_POST["item_id "];
/* get your max data from database using item_id, then assign $max
...
*/
echo $amount > $max ? 1 : 0
次に、jqueryajaxで金額を確認できます。
<input name="amount" class="amount" data-id="1" value="0"/>
$(".amount").change(function(){
var amount = $(this).val();
var item_id = $(this).attr("data-id");
$.post("checkMax.php", {"amount": amount, "item_id": item_id}, function(data){
if(data == "1")alert("Amount out of Max!");
});
});