0
<input id="img" type="file" name="img" accept="image/*">

そしてこれはJQueryコードです:

$('#img').change(function(){

    if($('#this').val() === '') { 

        $("#subm").remove();

    }  else {

         $('<button id="subm" type="submit">Press</button>').insertAfter('#advice');

   }

});

input fileが空かどうか、空かどうか、というボタンが存在するかどうかを確認しようとしていますsubm。それを削除しinput fileますが、ファイルがある場合は、その下部を作成します。問題は、submボットンがある場合、ファイルを選択し、変更した後input、それを空にした後、それJQueryが削除されないことです。

が空JQueryの場合、によって作成されたボタンを削除するにはどうすればよいですか?input file

よろしくお願いします!

4

4 に答える 4

3

$('#this')である必要があり、次の要素$(this)$('#this')一致しますid=this

于 2013-01-21T14:04:38.490 に答える
3

実際に「this」という id を持つ要素を持っていない限り、おそらくthis代わりにキーワードを使用するつもりでした:

$('#img').change(function(){
    // this will be the #img that fired the change event
    if($(this).val() === '') {
        $("#subm").remove();
    }  else {
         $('<button id="subm" type="submit">Press</button>').insertAfter('#advice');
    }
});
于 2013-01-21T14:05:01.947 に答える
0

注意すべきことの 1 つはthis、javascript および jQuery で使用されているコンテキストに応じて、 の値も変化する可能性があることです。今は大丈夫ですが、より複雑な状況では問題が発生する可能性があります

この状況のベスト プラクティスは、通常selfすぐに呼び出される別の変数を作成することです。

$('#img').change(function () {
    var self = this;
    // self will now ALWAYS be the #img that fired the change event.
    if ($(self).val() === '') {
        $("#subm").hide();
    } else {
        $("#subm").show();
    }
});

この問題は、下位の別の関数を使用した場合に発生し、下位の関数でthisを参照しthisます。self新しい関数にステップインするたびに新しい変数を定義して、常に何が何でthisあるかをロックします。(そして、それらの変数名が一意であることを忘れないでください。)

于 2013-01-21T14:10:25.167 に答える
0

これを使って:

<input id="img" type="file" name="img" accept="image/*">
<button id="subm" type="submit">Press</button>
$('#img').change(function(){
    if(!this.value) { 
        $("#subm").hide();
    } else {
        $("#subm").show();
    }
}).change(); // trigger event to init
于 2013-01-21T14:07:29.510 に答える