如何在动态显示的网页中增加生成的值
How to increment a generated value in a dynamically-displayed webpage
我有一个页面,允许用户通过单击按钮在 table 中显示新行(以填写子作业的详细信息)来将子作业添加到父作业。该行中的一个字段是由 PHP 脚本生成的参考编号。问题是每一行的参考号都是一样的。
我尝试使用 JavaScript 读取字段值,然后剥离数字并递增它,然后将它们全部放回一起,但这似乎有点矫枉过正。必须有一种更简单的方法来做到这一点。我也不知道如何让它将新值写入即将生成的行。
我的老板不想让我写新功能,如果我能帮忙的话,而是要我使用现有的功能。我的想法是更新 getNewJobRef() 以将当前值传递给它,以便它自动获取下一个值,但我不确定如何传递当前值,因为它在下面的代码中列出。我也不确定代码中还有多少其他地方调用了这个函数,所以我不想把它们搞砸。
<button id="add-new-row" style="text-align:center;margin-top:5px;width:85px;" class="boxbutton">Add New</button>
并且:
$(document.body).addEvent('click:relay(#add-new-row)', function (e, el) {
try{
e.preventDefault();
addChildJobRow();
}catch(e){
...
}
});
并且:
function addChildJobRow() {
try {
lastrow++;
let cl = (lastrow % 2 ? 'odd' : 'even');
showHeaderRow();
Elements.from(connectedjobtemplate({
rownum: lastrow,
cl: cl,
nysid: '',
dinNum: '',
warrantNum: ''
})).inject($('linkedJobsBody'));
} catch (e) {
...
}
}
并且:
<script id="connectedjobtemplate" type="text/template">
<tr id="childjobrow<%= rownum %>" class="<%= cl %>" data-row-id="<%= rownum %>">
<td colspan="7">
<table width="100%">
<tr>
<td style="width: 15%;">
<input data-row-id="<%= rownum %>" id="reference[<%= rownum %>]" name="childjobid[<%= rownum %>][reference]" value="<?php echo $this->MJob->getNewJobRef(232); ?>" class="ref" size="14" style="background-color: transparent; border: none;" />
</td>
</tr>
</table>
</td>
</tr>
</script>
PHP 脚本是:
function getNewJobRef($jobtypeid) {
if (empty($jobtypeid)) {
return '';
}
$select = $this->db->query('select * from jobtypecounters where jobtypeid =?', array($jobtypeid));
$this->db->query('update jobtypecounters set counter = last_insert_id(counter) + 1 where jobtypeid = ?', array($jobtypeid));
// read from write server to avoid replica lag
$Q = $this->db->query('select concat(prefix, lpad(last_insert_id(), 5, "0")) as newjobref from jobtypecounters where jobtypeid = ?', array($jobtypeid));
if ($Q->num_rows() == 1)
return $Q->row()->newjobref;
else
return '';
}
非常感谢任何帮助或指导。
编辑:该页面使用 MooTools,所以我被告知不能在同一页面上使用 jQuery,因为它们有冲突。那么如何在没有页面 refresh/Ajax 的情况下将变量传回 PHP 脚本,以获取要传回脚本的当前引用号。
我更新了我的代码如下:
function addChildJobRow() {
try {
lastrow++;
let cl = (lastrow % 2 ? 'odd' : 'even');
showHeaderRow();
var refNum = '<?php echo $this->MJob->getNewJobRef(232); ?>';
Elements.from(connectedjobtemplate({
rownum: lastrow,
cl: cl,
ref: refNum,
nysid: '',
dinNum: '',
warrantNum: ''
})).inject($('linkedJobsBody'));
} catch (e) {
console.log(e);
logevent({jobid: jid, event: 'add-new-row', uri: window.location.href, eventdata: e});
}
}
并且:
<input data-row-id="<%= rownum %>" id="reference[<%= rownum %>]" name="childjobid[<%= rownum %>][reference]" value="<%= ref %>" class="ref" size="14" style="background-color: transparent; border: none;" />
function getNewJobRef($jobtypeid, $refNum = 0) {
//check $refNum
if (empty($jobtypeid)) {
return '';
}
$select = $this->db->query('select * from jobtypecounters where jobtypeid =?', array($jobtypeid));
$this->db->query('update jobtypecounters set counter = last_insert_id(counter) + 1 where jobtypeid = ?', array($jobtypeid));
$Q = $this->db->query('select concat(prefix, lpad(last_insert_id(), 5, "0")) as newjobref from jobtypecounters where jobtypeid = ?', array($jobtypeid));
if ($Q->num_rows() == 1)
return $Q->row()->newjobref;
else
return '';
}
我想做的是调用 getNewJobRef 函数,传递的第二个参数是当前参考编号,但我不知道该怎么做。
编辑:这在理论上是可行的,但对于数据库方面的事情,必须调用该函数,所以它又回到了绘图板。
我添加了一个检查以查看是否已定义 refNum。如果不是,则调用 PHP 脚本并设置值;如果是,它拆分出文本部分,转换为整数并递增数字,然后将它们全部放回原处。
这是我的代码:
if (typeof refNum === 'undefined') {
refNum = '<?php echo $this->MJob->getNewJobRef(232); ?>';
} else {
var num = refNum.replace('ABC', '').toInt();
num += 1;
refNum = 'ABC' + num;
}
我有一个页面,允许用户通过单击按钮在 table 中显示新行(以填写子作业的详细信息)来将子作业添加到父作业。该行中的一个字段是由 PHP 脚本生成的参考编号。问题是每一行的参考号都是一样的。
我尝试使用 JavaScript 读取字段值,然后剥离数字并递增它,然后将它们全部放回一起,但这似乎有点矫枉过正。必须有一种更简单的方法来做到这一点。我也不知道如何让它将新值写入即将生成的行。
我的老板不想让我写新功能,如果我能帮忙的话,而是要我使用现有的功能。我的想法是更新 getNewJobRef() 以将当前值传递给它,以便它自动获取下一个值,但我不确定如何传递当前值,因为它在下面的代码中列出。我也不确定代码中还有多少其他地方调用了这个函数,所以我不想把它们搞砸。
<button id="add-new-row" style="text-align:center;margin-top:5px;width:85px;" class="boxbutton">Add New</button>
并且:
$(document.body).addEvent('click:relay(#add-new-row)', function (e, el) {
try{
e.preventDefault();
addChildJobRow();
}catch(e){
...
}
});
并且:
function addChildJobRow() {
try {
lastrow++;
let cl = (lastrow % 2 ? 'odd' : 'even');
showHeaderRow();
Elements.from(connectedjobtemplate({
rownum: lastrow,
cl: cl,
nysid: '',
dinNum: '',
warrantNum: ''
})).inject($('linkedJobsBody'));
} catch (e) {
...
}
}
并且:
<script id="connectedjobtemplate" type="text/template">
<tr id="childjobrow<%= rownum %>" class="<%= cl %>" data-row-id="<%= rownum %>">
<td colspan="7">
<table width="100%">
<tr>
<td style="width: 15%;">
<input data-row-id="<%= rownum %>" id="reference[<%= rownum %>]" name="childjobid[<%= rownum %>][reference]" value="<?php echo $this->MJob->getNewJobRef(232); ?>" class="ref" size="14" style="background-color: transparent; border: none;" />
</td>
</tr>
</table>
</td>
</tr>
</script>
PHP 脚本是:
function getNewJobRef($jobtypeid) {
if (empty($jobtypeid)) {
return '';
}
$select = $this->db->query('select * from jobtypecounters where jobtypeid =?', array($jobtypeid));
$this->db->query('update jobtypecounters set counter = last_insert_id(counter) + 1 where jobtypeid = ?', array($jobtypeid));
// read from write server to avoid replica lag
$Q = $this->db->query('select concat(prefix, lpad(last_insert_id(), 5, "0")) as newjobref from jobtypecounters where jobtypeid = ?', array($jobtypeid));
if ($Q->num_rows() == 1)
return $Q->row()->newjobref;
else
return '';
}
非常感谢任何帮助或指导。
编辑:该页面使用 MooTools,所以我被告知不能在同一页面上使用 jQuery,因为它们有冲突。那么如何在没有页面 refresh/Ajax 的情况下将变量传回 PHP 脚本,以获取要传回脚本的当前引用号。
我更新了我的代码如下:
function addChildJobRow() {
try {
lastrow++;
let cl = (lastrow % 2 ? 'odd' : 'even');
showHeaderRow();
var refNum = '<?php echo $this->MJob->getNewJobRef(232); ?>';
Elements.from(connectedjobtemplate({
rownum: lastrow,
cl: cl,
ref: refNum,
nysid: '',
dinNum: '',
warrantNum: ''
})).inject($('linkedJobsBody'));
} catch (e) {
console.log(e);
logevent({jobid: jid, event: 'add-new-row', uri: window.location.href, eventdata: e});
}
}
并且:
<input data-row-id="<%= rownum %>" id="reference[<%= rownum %>]" name="childjobid[<%= rownum %>][reference]" value="<%= ref %>" class="ref" size="14" style="background-color: transparent; border: none;" />
function getNewJobRef($jobtypeid, $refNum = 0) {
//check $refNum
if (empty($jobtypeid)) {
return '';
}
$select = $this->db->query('select * from jobtypecounters where jobtypeid =?', array($jobtypeid));
$this->db->query('update jobtypecounters set counter = last_insert_id(counter) + 1 where jobtypeid = ?', array($jobtypeid));
$Q = $this->db->query('select concat(prefix, lpad(last_insert_id(), 5, "0")) as newjobref from jobtypecounters where jobtypeid = ?', array($jobtypeid));
if ($Q->num_rows() == 1)
return $Q->row()->newjobref;
else
return '';
}
我想做的是调用 getNewJobRef 函数,传递的第二个参数是当前参考编号,但我不知道该怎么做。
编辑:这在理论上是可行的,但对于数据库方面的事情,必须调用该函数,所以它又回到了绘图板。
我添加了一个检查以查看是否已定义 refNum。如果不是,则调用 PHP 脚本并设置值;如果是,它拆分出文本部分,转换为整数并递增数字,然后将它们全部放回原处。
这是我的代码:
if (typeof refNum === 'undefined') {
refNum = '<?php echo $this->MJob->getNewJobRef(232); ?>';
} else {
var num = refNum.replace('ABC', '').toInt();
num += 1;
refNum = 'ABC' + num;
}