2015-10-26 3 views
1

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

В настоящее время я работаю над веб-страницей, которая создает большое количество элементов формы, где идентификатор, имя и значение каждого элемента формы зависит от предыдущего выбора пользователя, как в следующем примере, где id, name и value зависит от значения $ независимо от обр содержит в то время,

?> 
<div id='<?= $arr['param_name'] ?>Div' class='dynamicDiv'> 
    <b><?= $arr['param_desc'] ?></b> 
    <br/> 
    <input type='Text' id='<?= $arr['param_name'] ?>' 
     name='<?= $arr['param_name'] ?>' 
     value='<?= $arr['default_val'] ?>' class='dynamicTextBox'> 
</div> 
<?php 

Эта часть в основном хорошо, но есть ряд кнопок отправки, которые так же генерируются динамически, но жестко закодированы. JQuery для этих кнопок ввода жестко закодировано, как показано в следующем примере,

<input type='Submit' value=' Query Data' name='funcSearch' 
    onclick="queryAngle(('<?php echo $result[0]['query_id'] ?>'),('<?php echo $_GET['schema'] ?>'), 
    ($('#firstFrame').val()), ($('#lastFrame').val()),($('#skip').val()), ($('#atomID1').val()), 
    ($('#atomID2').val()), ($('#atomID3').val())); false;" class='dynamicParamButton'><br/><br/> 

Будучи, что существуют дюжины из них кнопки отправки, каждый жестко закодированы, и большинство, по крайней мере в два раза больше этот здесь, он довольно усложняется довольно быстро. Я хотел бы сделать какой-то объектно-ориентированный подход, чтобы сделать эту вещь удобной, но нужно немного помочь выяснить, с чего начать. Есть ли хорошее место для начала? Может быть, я должен сгенерировать кнопку отправки в виде строки в PHP, или есть некоторые функции jQuery для решения этой проблемы?

Для полноты, кнопка представить в примере вставленного выше посылает значения следующей функции в файл JavaScript,

function queryAngle(query_id, schema, firstFrame, lastFrame, frameSkip, atomID1, atomID2, atomID3) { 
if (query_id === "") { 
    $("#QueryInfo").html("<p>Error Please enter valid arguments</p>"); 
    return; 
} 
$("#waiting").show(500); 
$("#interface").hide(0); 

$.post('./function_files/angleFunction.php', 
    { 
     query_id: query_id, 
     simschema: schema, 
     firstFrame: firstFrame, 
     lastFrame: lastFrame, 
     frameSkip: frameSkip, 
     atomID1: atomID1, 
     atomID2: atomID2, 
     atomID3: atomID3 
    }, 

    function (data) { 
     showResultReady(data); 
    }); 
} 

Но есть дюжины этих функций тоже, как queryAngle показано здесь , но также queryDensity, queryTorsion и т. д. Все они делают одно и то же: передайте значения в файл, angleFunction.php, densityFunction.php, torsionFunction.php, соответственно, и было бы здорово иметь способ привнести некоторую абстракцию или объектно-ориентированную перспективу в эту , Спасибо за любую помощь или идеи.

+1

Вы задумывались над инфраструктурой привязки данных, например https://docs.angularjs.org/guide/databinding? – kuanb

+0

Это вопрос вкуса, но я стараюсь использовать [Slim framework] (http://www.slimframework.com/) для таких проектов. Вы можете использовать несколько контроллеров и даже сделать из них какую-то иерархию и промежуточное ПО, так что URL-адрес для создания кнопки будет sth. подобный '/ type1/угол45/цветный/маленький'. Но опять же, это вопрос вкуса. – Jan

ответ

0

По моему опыту нет простого и чистого способа генерации JavaScript с PHP динамически, вы обычно получаете уродливый код здесь или там.

Таким образом, для создания форм динамически представляется работа, созданная для библиотеки форм. Я бы предположил, что большинство фреймворков обеспечивают что-то в этом направлении, поскольку это довольно распространенная задача. Вы не указали, какой Framework вы используете, и если вы не используете одно, мое первое предложение - это взять его в руки.

Я сам работал с Zend_Form, и они работают неплохо, с небольшим количеством кодирования вы можете получить инструмент, который вы ищете. Например, Zend_Form используется для создания простого автозаполнения с помощью формы Dijit в

$element = new Zend_Dojo_Form_Element_FilteringSelect($variable); 
$element->setStoreId($variable . "_store"); 
$element->setStoreType("dojox.data.QueryReadStore"); 
$element->setStoreParams(array("url" => "url/autocomplete-key-value?company=1")); 

Это не является вложенным элементом, но вы можете получить представление о том, как они работают в целом. Если вы опубликуете, какие рамки вы используете, вы, вероятно, получите лучший ответ.

Надеюсь, это поможет !.

Смежные вопросы