0

以下に示すコードを使用して、特定のオプションが<select>ダイアログから選択されたときに確認ボックスを作成しています。「バー」オプションを選択すると、確認ダイアログが正常に表示されます。ただし、キャンセルすると、選択したオプションが空白になります。最初に別のオプションを選択し、次に「バー」を選択してキャンセルすると、以前に選択したオプションに戻ります (これは望ましい動作です)。最初のキャンセルは失敗するのに、その後のキャンセルは失敗しないのはなぜですか?

<html>
    <head>
        <title>Test of jQuery confirm select</title>
        <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
        <script type="text/javascript">
            $(function(){
                $('#example').change(function() {
                    var selected = $(this).val();

                    if (selected == 'bar') {
                        if (!confirm('Are you sure?')) {
                            $(this).val($.data(this, 'current')); // added parenthesis (edit)
                            return false;
                        }     
                    }
                    $.data(this, 'current', $(this).val());
                });
            });
        </script>
    </head>
        <select id="example">
            <option value="none" selected="selected">--Select an Option--</option>
            <option value="foo">foo</option>
            <option value="bar">bar</option>
            <option value="que">que</option>
        </select>
    <body>
    </body>
</html>

jsFiddle デモ

明確にするために、他のオプションから「バー」に移動すると、これは発生しません。ただし、「バー」が最初に選択したオプションである場合は常に発生します。

4

1 に答える 1

1

これはcurrent、この関数の最初の実行時に設定されていないためです。

if最初のステートメントの前に次を挿入します。

if($.data(this, 'current') == null) $.data(this, 'current', 'none');      

jsフィドル

于 2013-08-16T20:27:32.357 に答える