Intereting Posts
PDO Error – PDOException 'с сообщением' SQLSTATE : общая ошибка ' PHP и MySQL: оптимизация базы данных Почему, Fatal error: Class 'PHPUnit_Framework_TestCase' не найден в …? Escape цитаты в переменной с PHP Взорвать все остальные слова Какой подход кода позволит пользователям применять три необязательные переменные в PHP / MySQL? Как проверить, есть ли в нем URL-адрес страницы или нет с PHP? Как успешно отправить электронное письмо в контактную форму через CodeIgniter? как я могу читать файлы редактирования pptx / docx / xlsx с помощью PHP? Как бы остановить этот цикл foreach после 3 итераций? Запись в php: // stderr laravel 5.1 говорит для всех других маршрутов, что кроме ('/'), что 404 страница не найдена на онлайн-сервере Amazon с использованием ec2 Php классы (я думаю) PHP, MySQL: получение электронной почты, автоматический поиск в БД и отправка электронной почты по результатам Включение MySQL ON DUPLICATE KEY в таблицу аудита или журнала

форма заменена на textarea, не дает другой выход

У меня есть два файла

  1. index.php
  2. code.js

У меня есть код в index.php, который содержит формы и с помощью code.js. Я заменяю pre tag этой формой. Так что все нормально. Чтобы понять мою проблему, вы должны увидеть мой код. Поэтому, прежде всего, я даю свой код

Файл index.php:

<html> <head> <link rel="stylesheet" href="http://code.guru99.com/css/1140.css" type="text/css" media="screen" /> <link rel="stylesheet" href="http://code.guru99.com/css/styles.css" type="text/css" media="screen" /> <link rel="stylesheet" href="http://codemirror.net/doc/docs.css" type="text/css" media="screen" /> <script src="http://code.guru99.com/php/lib/codemirror.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">></script> <link rel="stylesheet" href="http://code.guru99.com/Sanjay/lib/codemirror.css" type="text/css" media="screen" /> <script type="text/javascript" src="http://code.guru99.com/perl/perl.js"></script> <script type="text/javascript" src="cperl.js"></script> <script src="code.js"></script> </head> <body> <style type="text/css"> .CodeMirror { border: 1px solid #eee; height: auto; width : 630px; } .CodeMirror-scroll { height: auto; overflow-y: hidden; overflow-x: auto; } </style> <p>Integer : whole numbers eg -3, 0, 69. The maximum value of an integer is platform-dependent. On a 32 bit machine, its usually around 2 billion. 64 bit machines usually have larger values. The constant PHP_INT_MAX is used to determine the maximum value.</p> <pre class="codeguru">say 'hi';</pre> Let us now look at how PHP determines the data type depending on the attributes of the supplied data. <pre class="codeguru">say 'hello';</pre> Floating point numbers <pre class="codeguru">say 'you r amazing';</pre> Character strings <pre class="codeNrun">say 'i am fine';</pre> <form class="hidden code-box" method="GET" name="sample"> <div dir="ltr"> <textarea class="php" name="codeguru"></textarea> </div> <input type="button" value="Run" /> <br/> <br/>Output: <br/> <br/> <textarea id="print-result4" disabled="true" cols="77"></textarea> <br/> </form> <form class="hidden code-box" method="GET" name="Nosample"> <div dir="ltr"> <textarea class="php" name="codeNrun"></textarea> </div> </form> </body> </html> 

Файл code.js:

 $(document).ready(function () { var idIndex = 0; $('pre.codeguru').each(function () { var pre = this; var form = $('form[name=sample]').clone(); $(form).removeAttr('name'); $(form).removeClass('hidden'); $($(form).find('textarea')[0]).val($(pre).text()); var id = $(pre).attr('id'); $(form).find('div textarea[name=code]').first().attr('id', id); $(form).find('#print-result4').first().attr('id', 'print-result' + idIndex++); $(pre).replaceWith(form); }); var n = 0; $('input[type=button]').each(function () { $(this).click(function (x) { return function () { execute(x); }; }(n++)) }); window.editors = []; $('textarea[name=codeguru]').each(function () { window.editor = CodeMirror.fromTextArea(this, { lineNumbers: true, matchBrackets: true, mode: "perl", tabMode: "shift" }); editors.push(editor); }); $('pre.codeNrun').each(function () { var pre = this; var form = $('form[name=Nosample]').clone(); $(form).removeAttr('name'); $(form).removeClass('hidden'); $($(form).find('textarea')[0]).val($(pre).text()); var id = $(pre).attr('id'); $(form).find('div textarea[name=codeNrun]').first().attr('id', id); $(pre).replaceWith(form); }); window.editors = []; $('textarea[name=codeNrun]').each(function () { window.editor = CodeMirror.fromTextArea(this, { lineNumbers: true, matchBrackets: true, mode: "perl", tabMode: "shift" }); editors.push(editor); }); }); function execute(idx) { p5pkg.CORE.print = function (List__) { var i; for (i = 0; i < List__.length; i++) { document.getElementById('print-result' + idx).value += p5str(List__[i]) } return true; }; p5pkg["main"]["v_^O"] = "browser"; p5pkg["main"]["Hash_INC"]["Perlito5/strict.pm"] = "Perlito5/strict.pm"; p5pkg["main"]["Hash_INC"]["Perlito5/warnings.pm"] = "Perlito5/warnings.pm"; var source = editors[idx].getValue(); var pos = 0; var ast; var match; document.getElementById('print-result' + idx).value = ""; try { var start = new Date().getTime(); var js_source = p5pkg["Perlito5"].compile_p5_to_js([source]); var end = new Date().getTime(); var time = end - start; // run start = new Date().getTime(); eval(js_source); end = new Date().getTime(); time = end - start; } catch (err) { //document.getElementById('log-result').value += "Error:\n"; } } 

так что теперь вы можете видеть, что есть два образца имен образцов и Nosample, как это

 <form class="hidden code-box" method="GET" name="sample"> 

а также

 <form class="hidden code-box" method="GET" name="Nosample"> 

и есть два типа pre-меток codeguru и codeNrun, как это

 <pre class="codeguru">say 'you r amazing';</pre> 

А также

 <pre class="codeNrun">say 'i am fine';</pre> 

Поэтому, когда я заменяю этот предварительный код формой, тогда, когда я пытаюсь запустить, тогда вывод печатается в другом текстовом поле, я не могу понять, почему это может произойти.

Есть дополнительные window.editors = []; в вашем коде.

Сначала вы создаете массив editors , затем нажимаете на него некоторые объекты CodeMirror, затем снова переопределяете editors в пустой массив … Просто удалите второй window.editors = []; линия.

Во-вторых: что такое значение переменной id здесь?

 $(form).find('div textarea[name=code]').first().attr('id', id); 

Вы читаете id textarea поля, но, похоже, он не undefined , поскольку в HTML нет id .

Подобная ошибка в этой строке:

 $(form).find('div textarea[name=codeNrun]').first().attr('id', id); 

Я думаю, что id должен быть здесь 'print-result3' , но теперь он не undefined .

Обратите внимание, что дополнительная цифра для тел id добавляется в порядке $('input[type=button]').each() предоставляет. Это должен быть порядок элементов в документе. Обратите внимание, что исходная button является последней, которую вы можете видеть на экране.


Я думаю, что в моем ответе отсутствовало объяснение, как настроить кнопку на редактор и соответствующий результат print-resultX . Я попытаюсь объяснить это здесь:

В исходном <input id="print-resultX" ... /> X должно быть количество итоговых входов print-result то есть количество объектов CodeMirror, поскольку, когда вы клонируете form , все клоны помещаются перед это оригинальный форма. Во время клонирования соответствующие X s добавляются в тело каждого значения id .

Это значение X передается функции execute(idx) в качестве аргумента idx , то есть нажатая кнопка «знает», какой редактор следует обрабатывать в execute() , поскольку X также представляет индекс в массиве editors .

При добавлении idx в тело (= 'print-result' ) id , вы можете настраивать действия в конкретном поле результата печати.