0

データを PHP Twodimental Array に格納しています。PHP ARRAY のサンプル値を以下に示します。

First Element in Array
ID = 1
QUES= <p>ABCD</p>
OPT_A = <p>A</p>
OPT_B = <p>B</p>

Second Element in Array
ID = 2
QUES= <p> TWOABCD </p>
OPT_A = <p>TWA </p>
OPT_B = <p>TWB</p>

TEXTAREA の QUEST、OPT_A、OPT_B の値を HTML FORM で表示しています (リッチ テキストを表示するために TinyMCE jquery プラグインを使用しています)。フォームには次のボタンがあります: NEXT & PREVIOUS。

次へをクリックすると、すべての値の配列内の次の要素からのデータで TEXT AREAS を更新したいと考えています。インターネットでの検索によると、AJAXを使用して同じことを達成できますが、HTML FORMのボタンをクリックして複数のテキスト領域のデータを同時に更新する方法はわかりません。また、データは HTML タグの形式で保存されることに注意してください (最大長は 4000 文字まで)。

現在、フォームのボタンをクリックしてページ全体を更新するという非常に古い方法を使用しています。ページが更新されたとき、ページが完全に読み込まれる前に HTML タグが一瞬表示されるなど、多くの欠点があります。

(これら2つの問題を修正する)の参照を提案してください:

  1. AJAX を使用してボタン (HTML-FORM 内) をクリックすると HTML-FORM の複数の Textares のデータを更新する
  2. ページが完全に読み込まれる前に、テキスト領域に HTML コードが一時的に表示されるのを回避します。

更新されたコードは以下のとおりです。

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
    <form>
        <input id="id" type="hidden" name="id">
        <p>Question:</p>
        <p id="myInstance3" style="border: 1px solid #000;"><textarea id="quest" readonly></textarea></p>
        <p>Option A:</p>
        <textarea id="opt_a" ></textarea>
        <p>Option B:</p>
        <textarea id="opt_b" ></textarea>
        <p>
            <button id="previous">Previous</button>
            <button id="next">Next</button>
        </p>
    </form>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript"> 
var array = [{"id":1,"quest":"<p>ABC<\/p>","opt_a":"A","opt_b":"B"}, {"id":2,"quest":"<p>DEF<\/p>","opt_a":"1","opt_b":"2"}];
    var ArrayWalker = (function () {
        var _array = null,
            _index = 0,
            _walk  = function (step) {
                if (_array === null) {
                    throw 'Array is not initialized';
                }
                _index += step;
                if (_index < 0 || _index === _array.length) {
                    _index -= step;
                }
                return _array[_index];
            };
        return {
            init: function (array) {
                _array = array;
                _index = 0;
            },
            current: function () {
                return _walk(0);
            },
            next: function () {
                return _walk(1);
            },
            previous: function () {
                return _walk(-1);
            },
            index: function (seek) {
                if (seek !== undefined) {
                    _index = window.parseInt(seek);
                }
                return _index;
            }
        };
    })();

    function fillElements(data) {
        $('#id').val(data['id']);
        $('#quest').val(data['quest']);
        $('#opt_a').val(data['opt_a']);
        $('#opt_b').val(data['opt_b']);
    }

    ArrayWalker.init(array);
    fillElements(ArrayWalker.current());

    $('#previous').click(function (e) {
        e.preventDefault();
        fillElements(ArrayWalker.previous());
    });
    $('#next').click(function (e) {
        e.preventDefault();
        fillElements(ArrayWalker.next());
    });
</script>
<script src="http://js.nicedit.com/nicEdit-latest.js" type="text/javascript"></script>
<script type="text/javascript">
     bkLib.onDomLoaded(function() {
          var myNicEditor = new nicEditor();
          myNicEditor.setPanel('myNicPanel');
          myNicEditor.addInstance('myInstance3');
     });
  </script> 
</body>
</html>
4

1 に答える 1