これは本当に私を狂わせています...;)
各行に[削除]ボタンのテーブルがあります。コードは次のとおりです。
while( $row=mysqli_fetch_row($result) ){
echo'<tr id="'.$row[0].'" >';
echo'<td id="colx">'.$row[1].'</td>';
echo'<td id="CellTextBeschreibung">'.$row[5].'</td>';
echo'<td id="CellTextLong">'.$row[3].'</td>';
echo'<td id="CellTextLat">'.$row[4].'</td>';
?>
<td><input type="button" onclick="ShowOnMap( <?php echo $row[0]; ?> )" value="Zeigen"></td>
<td ><?php echo( $row[6]); ?></td>
<td>
<FORM id='deleteform' action='delete.php' method='post'>
<INPUT type='hidden' name='mapid' value='<?php echo( $row[0]); ?>'>
<INPUT type='hidden' name='userid' value='<?php echo( $row[2]); ?>'>
<INPUT type='hidden' name='aktuuserid' value='<?php echo( $userID); ?>'>
<INPUT id='subdel' type='submit' OnClick="return confirm('Löschen.Bist Du sicher?');" value='Löschen'>
</FORM>
</td>
<td id="colx"> <?php echo( $row[7]); ?> </td>
<td id="colx"> <?php echo( $row[8]); ?> </td>
</tr>
<?php
}
私はこのJqueryコードで送信ボタン(FORM)をcachしようとしています:
$("#subdel").click( function() {
$.post( $("#deleteform").attr("action"), $("#deleteform").serializeArray(), function(info){alert(info); document.location.reload(true); });
$("#deleteform").submit( function() {
return false;
});
});
しかし、それは機能していません... ...それは「delete.php」ページをロードし、元のページに戻りません...
私はSAVINGの同じコードを持っていますが(テーブルにはありません)、これは機能していません...
これについての助けをいただければ幸いです...よろしくお願いします... :)
ps:これが機能するSAVE関数です:
<FORM id='eingabeform' action='save.php' method='post'>
<INPUT type='hidden' name='userid' value='<?php echo( $userID); ?>'>
<INPUT type='hidden' name='username' value='<?php echo( $aktuuser); ?>'>
<INPUT type='hidden' id='inputicon' name='icon' value='1'>
<INPUT type='hidden' id ='long' name='long' maxlength='20' >
<INPUT type='hidden' id ='lat' name='lat' maxlength='20' >
<div>Beschreibung: <INPUT type='text' id ='longlattext' name='longlattext' maxlength='300' ></div>
<div>Link (bei Bearf):<INPUT type='text' id ='link' name='link' maxlength='300' ></div>
<br>
<INPUT id='submit' type='submit' value='Speichern'> <INPUT id='abbrechen' type='Button' value='Schließen' onclick="Hide('Lmenuinput')">
</FORM>
および関連するJqueryコード:
$("#submit").click( function() {
$.post( $("#eingabeform").attr("action"), $("#eingabeform").serializeArray(), function(info){alert(info); if (!info=="Du musst auf der Karte einen Punkt anklicken" || !info=="Das ist kein Link! Check das bitte mal, ThX.. ;)") {document.location.reload(true); }});
$("#eingabeform").submit( function() {
return false;
});
});
ご覧のとおり、これは同じです...これは機能しています...唯一の違いは、上記のDELETE FORMがテーブル内で乗算され、SAVEFORMが乗算されないことです...これはこのエラーに関連している可能性がありますか?
これがdelete.phpです:
<?php
include 'DBconn.php';
// ******* TabelleKopf speichern *****************************
$sql="DELETE FROM `map` WHERE mapID=".$_POST[mapid];
if (!mysqli_query($con,$sql))
{
die('Fail: ' . mysqli_error($con));
}
echo "Success";
mysqli_close($con);
}
?>
<input type="submit" />
デフォルトでクリックすると、フォームが送信されます(そしてページが更新されます)。したがって、別のページに移動しないようにする場合は、別のタイプのボタンを使用する<input type="button" />
か、jQueryに実装されて<button />
いるデフォルトのイベントを防止しますe.preventDefault()
。
$("#subdel").click( function(e) {
$.post( $("#deleteform").attr("action"), $("#deleteform").serializeArray(), function(info){alert(info); document.location.reload(true); });
e.preventDefault();
});
更新:そして、PHPループ内のHTML要素に同じIDを使用していることに気づきました。これは、同じIDを持つ複数の要素があることを意味します。それは非常に間違っています。それが機能していない理由です。同じIDの要素が複数ある場合、jQueryは最初の要素のみを選択します。したがって、イベントハンドラーは最初のフォームでのみ機能します。ここで非常に簡単な例をテストできます:http://jsfiddle.net/AEm8B/
物事を機能させるために、IDの代わりにクラスを使用することができます。ここにリファクタリングされたフォームの例を示しますが、IDは意味的に間違っているため、ループ全体でクラスに変更する必要があります。IDは一意である必要があります。
<FORM class='deleteform' action='delete.php' method='post'>
<INPUT type='hidden' class='mapid' value='<?php echo( $row[0]); ?>'>
<INPUT type='hidden' class='userid' value='<?php echo( $row[2]); ?>'>
<INPUT type='hidden' class='aktuuserid' value='<?php echo( $userID); ?>'>
<INPUT class='subdel' type='submit' OnClick="return confirm('Löschen.Bist Du sicher?');" value='Löschen'>
</FORM>
そしてあなたのjQueryコード:
$(".subdel").click( function() {
var $form = $(this).parents(".deleteForm");
$.post( $form.attr("action"), $form.serializeArray(), function(info){alert(info); document.location.reload(true); });
});
// If you want use this construction instead of e.preventDefault()
// it's better bind it outside of click handler if you're not going
// to submit it with traditional means.
$(".deleteform").submit( function() {
return false;
});*/
またはe.preventDefaultを使用します(より望ましい場合があります):
$(".subdel").click( function(e) {
var $form = $(this).parents(".deleteForm");
e.preventDefault();
$.post( $form.attr("action"), $form.serializeArray(), function(info){alert(info); document.location.reload(true); });
});
これは最終的にそれを作るはずです
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加