2017-10-30 12 views
-2

ユーザーが削除ボタンをクリックしたときにテーブルの行を削除する機能があります。 2行しか残っていない場合(ヘッダーと入力行)、ユーザーが削除できるようにしたくありません。私はリターン(偽)を試みました。とexit();どちらも働かない。私はアラートを取得しますが、行はとにかく削除されます。ifステートメントの停止機能

I持って下に次のjQueryの機能:

function deleteLine() { 
    var $rowcount = $("#desc_table tr").length; 
    if ($rowcount <= 2) { 
    alert("Cannot remove all the description lines."); 
    return (false); 
    } else { 
    $("#desc_table").on('click', '.btnDelete', function() { 
     $(this).closest('tr').remove(); 
    }); 
    } 
} 

わからないあなたはこれを必要とするが、ここに私のhtmlの一部である場合:

<tr> 
    <td><input name="desc1" type="text"></td> 
    <td> <input name="desc_hr1" type="text"></td> 
    <td> <input name="desc_rt1" type="text"></td> 
    <td><input name="desc_amt1" type="text"></td> 
    <td><input type="button" value="X" name="delete" class="btnDelete" onclick="deleteLine()"></td> 
</tr> 
<tr> 
    <td><input name="desc2" type="text"></td> 
    <td> <input name="desc_hr2" type="text"></td> 
    <td> <input name="desc_rt2" type="text"></td> 
    <td><input name="desc_amt2" type="text"></td> 
    <td><input type="button" value="X" name="delete" class="btnDelete" onclick="deleteLine()"></td> 
</tr> 
<tr> 
    <td><input name="desc3" type="text"></td> 
    <td> <input name="desc_hr3" type="text"></td> 
    <td> <input name="desc_rt3" type="text"></td> 
    <td><input name="desc_amt3" type="text"></td> 
    <td><input type="button" value="X" name="delete" class="btnDelete" onclick="deleteLine()"></td> 
</tr>     
+0

無関係だ 'onclickの= ")(deleteLineを返す"' –

+0

@vicbyte。それを試してみてください。 –

+0

私はすでに両方の構文vicbyteを試しました。どちらも結果を変更しませんでした。私はあなたの変更をケビンと試してみたが、どちらもうまくいかなかった。最後の行を削除しています。 – jd0117

答えて

1

この行は、すべての行にイベントハンドラを追加しますその短絡はあなたのチェックを短絡させます:

$("#desc_table").on('click','.btnDelete',function() { 
    $(this).closest('tr').remove(); 
}); 

これで、彼らはすべて今すぐ行

あなたがして入力への参照を追加することができます。

<input type="button" value="X" name="delete" class="btnDelete" onclick="deleteLine(this)"> 

そして行を削除するためにそれを使用します。もちろん

function deleteLine(e){ 
    var $rowcount = $("#desc_table tr").length; 
    if($rowcount <= 2){ 
     alert("Cannot remove all the description lines."); 
     return ; 
    } 
    else{ 
     e.closest('tr').remove(); 
    } 
} 

、他の方法もあります - 重要なことは、すべての行に新しいクリックハンドラを追加しないようにすることです。

+0

Mark、ありがとう、これは素晴らしい仕事。私は何が冗長であったか分からなかった。 – jd0117

0

onclick属性は不要です。クリックハンドラを委任し、そこにチェックを入れてください。

$("#desc_table").on('click', '.btnDelete', function() { 
 
    var $rowcount = $("#desc_table tr").length; 
 
    if ($rowcount <= 2) { 
 
    alert("Cannot remove all the description lines."); 
 
    return (false); 
 
    } else { 
 
    $(this).closest('tr').remove(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table id="desc_table"> 
 
    <tr> 
 
    <td><input name="desc1" type="text"></td> 
 
    <td> <input name="desc_hr1" type="text"></td> 
 
    <td> <input name="desc_rt1" type="text"></td> 
 
    <td><input name="desc_amt1" type="text"></td> 
 
    <td><input type="button" value="X" name="delete" class="btnDelete" ></td> 
 
    </tr> 
 
    <tr> 
 
    <td><input name="desc2" type="text"></td> 
 
    <td> <input name="desc_hr2" type="text"></td> 
 
    <td> <input name="desc_rt2" type="text"></td> 
 
    <td><input name="desc_amt2" type="text"></td> 
 
    <td><input type="button" value="X" name="delete" class="btnDelete"></td> 
 
    </tr> 
 
    <tr> 
 
    <td><input name="desc3" type="text"></td> 
 
    <td> <input name="desc_hr3" type="text"></td> 
 
    <td> <input name="desc_rt3" type="text"></td> 
 
    <td><input name="desc_amt3" type="text"></td> 
 
    <td><input type="button" value="X" name="delete" class="btnDelete"></td> 
 
    </tr> 
 
</table>

+0

ありがとうBarmar、この解決策も私のために働いた。それが私が試みた最初の解決策であるので、私はマークの上に行った。しかし、応答ありがとう!私ができるなら、私はあなたに投票します...しかし、私は評判10に過ぎません。誰かがこの質問のカップルを私にノックしました。 – jd0117

関連する問題