我不确定这是否完全可行,但我正在模仿从平面PHP构建的程序到Symfony2的函数。我坚持这个功能。
1)首先,有一行输入字段是动态填充的。
<label for="noofracks"># of racks</label>
<input type="text" name="noofitems" id="numberform">
<div id="">
<form name="dataform" method="post" action="" id="dataform">
<input type="hidden" name="lastdasearch">
<div id="racks">
<div class="rack" id="rack1">
<span id="itemno1"><a href="javascript:void(0)" onclick="open('{{ path('log_searchsub'}}', 'popupwindow', 'width = 600, height = 600, scrollbars = 1'); return false;">Search</a>
</span>
<input type="hidden" id="subid" name="subid1" value="" placeholder="subid" disabled><br/>
<input type="text" id="dano" name="dano1" value="" placeholder="dano" disabled><br/>
<input type="text" id="partno" name="partno1" value="" placeholder="partno" disabled><br/>
<input type="text" id="rackno" name="rackno1" value="" placeholder="rackno" disabled><br/>
<input type="text" id="diecode" name="diecode1" value="" placeholder="diecode" disabled><br/>
<input type="text" id="heatcode" name="heatcode1" value="" placeholder="heatcode" disabled><br/>
<hr />
</div>
</div>
<input type="date" name="shipdate"><br/>
<input type="number" name="qtyshipped" placeholder="Qty Out"><br/>
<input type="text" name="blno" placeholder="BL #"><br/>
<button type="submit" name="submit">Submit</button>
</form>
2)<div id="racks">
下的输入字段将根据用户插入<input id="numberform"..
的数字填充。所以下一个填充的输入行将增加数字name =“dano2”,dano3 ......等
3)将从弹出窗口中插入值,该窗口列出数据库中的数据以及链接<a href="javascript:void(0)" onclick="open('{{ path('log_searchsub', {'return' : noofitems}) }}', 'popupwindow', 'width = 600, height = 600, scrollbars = 1'); return false;">Search</a>
的来源。它将打开一个包含数据库中列表的弹出窗口:
<table class="tablesorter">
<thead>
<th>DA</th>
<th>Part</th>
<th>Batch</th>
<th>Rack</th>
<th>Die Code</th>
<th>Heat Code</th>
<th>Qty</th>
<th></th>
</thead>
{% for entity in entities %}
<tr>
<td>{{ entity.dano }}</td>
<td>{{ entity.partno }}</td>
<td>{{ entity.batchno }}</td>
<td>{{ entity.rackno }}</td>
<td>{{ entity.diecode }}</td>
<td>{{ entity.heatcode }}</td>
<td>{{ entity.inqty }}</td>
<td><a href="{{ path('log_loaddata', {'subid' : entity.subid}) }}">Select</a></td>
</tr>
{% endfor %}
</table>
4)我有“选择”链接转到从Doctrine中选择该行数据的控制器,我希望它将它加载到目标右输入数字的输入字段中(进入dano1,partno1,rackno1 .. )。我只是......不知道如何去做。
/**
* @Route("/searchsub/{subid}", name="log_loaddata")
* @Method("GET")
*/
public function loadDataAction($subid) {
$em = $this->getDoctrine()->getRepository('Main');
$entity = $em->allBySub($subid);
//get the exact entity that the user selected and load the data into the target input fields.
//close the popup window
}
如果有人知道更好的方法,那也会很棒!
编辑:我想要的行为和行动是:
在每个附加的<div class="rack" id="rack1">
的内容上,有一个搜索链接,它将为弹出窗口提供一个列出数据行的表(行列出'dano','partno','batchno的数据'即将插入输入字段)。每行数据旁边都有一个“选择”链接,我想抓取那一行数据,并填充到父页面输入字段。我想让它确定要进入哪个<div class="rack" id="rack..
(我还没有弄清楚那个部分)。
答案 0 :(得分:0)
基于我到目前为止所理解的,您要做的是创建一个单击函数,该函数将从表行获取信息并使用这些值创建输入字段。所以这将是纯粹的JS。
首先,您需要稍微更改HTML以使其工作。
对于您要填充的每个输入字段,您应该替换id
字段以使其成为data-name
,因为HTML id
无法复制,并且我们将有多个字段这些(又称多个“机架”)
此:
<input type="text" id="dano" name="dano1" ... />
应该是:
<input type="text" data-name="dano" name="dano1" ... />
其他输入也一样。
在弹出窗口的HTML中,您需要将相同的data-name="[inputName]"
添加到<td>
元素,以便识别它们。
例如:
<td data-name="dano">{{ entity.dano }}</td>
最后,我们可以在select链接中添加一个类来将click事件附加到它:
<a class"select-link" data-id="{{ entity.subid }}" ... >Select</a>
现在,一旦您点击链接,您基本上需要做的就是获取填充所需的信息。所以像:
var parentWindow = window.opener; // get the original window to push info to
$('.select-link').on('click', function(e) {
var cells = $(this).parent().siblings(); // Get all TD elements in the same row
var subid = $('this').data('id');
cells.each(function(i, element){
var name = $(element).data('name');
var newRack = parentWindow.$('#rack1').clone() // Clone the row
// insert data into new rack
newRack.attr('id', 'rack' + subid);
$('input[data-name=' + name + ']', newRack)
.val($(element).text())
.attr('name', name + subid);
});
// Append new rack to the main window
parentWindow.$('#racks').append(newRack);
});
当然,这只是一个概念。它将需要一些调整和谷歌搜索。希望它有所帮助。