如何在动态显示的网页中增加生成的值

时间:2019-04-03 13:03:03

标签: javascript php mootools

我有一个页面,允许用户通过单击按钮以在表中显示新行(以填写子作业的详细信息)来将子作业添加到父作业。该行中的字段之一是由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,因为它们会发生冲突。因此,如何在不进行页面刷新/ 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函数,并传递第二个参数作为当前参考号,但是我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

编辑:从理论上讲,这是可行的,但是对于数据库方面的东西,必须调用该函数,因此它要回到绘图板上。

我添加了一个检查以查看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;
}