0

selectの現在の値を出力する送信ボタンがあります。on.changeオプションが選択される前に値が印刷されないようにするために、少なくとも1つのオプションが選択されていることを確認するイベントを追加しました。

問題は、select の内容が静的ではないことです。交換可能です。そのため、新しい値が出力される前に、プロセスを繰り返します (古い変更イベントのバインドを解除し、新しいイベントを追加します)。これを行わないと、使用できなくなった古い値が印刷される可能性があります。

私は試しました:

$('#smth').off('change');

しかし、うまくいきません。イベントを削除してもボタンを押すことができます。

コード:

HTML:

<input type="submit" value="reset" id="reset" />
<input type="submit" value="change val" id="chv"/>
<br/><br/>
<select id="smth">
    <option selected="1" disabled="1">Choose</option>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
</select>

JS:

$('#smth').on('change',function() {

    $('#sub').on('click', function() {

        $('#container').text($('#smth').val());

    });

});

$('#chv').one('click', function() {

    $('#smth').html('<option selected="1" disabled="1">Choose</option><option>test</option>');

});

$('#reset').on('click',function(){
    $('#smth').off('change');
});

フィドルの例:

http://jsfiddle.net/JgxFA/1/

4

1 に答える 1

3

埋め込まれた #sub クリック ハンドラーもアンバインドする必要があります。

$('#reset').on('click',function(){
    $('#sub').off('click');
    $('#smth').off('change');
});
于 2013-09-02T00:01:58.870 に答える