【问题标题】:How to pass variable objects to multiple javascript popup forms如何将变量对象传递给多个 javascript 弹出表单
【发布时间】:2012-07-12 20:14:21
【问题描述】:

这是我第一次认真尝试 javascript/ajax。

概述: 我有一个索引页面列出了多条记录,每条记录在不同的行上。对于每条记录,我都有一个链接,它会弹出一个包含 symfony 表单的小 javascript 窗口。一切顺利,除了我不知道如何通过弹出式javascript传递每条记录的对象ID。这是我所拥有的:

从行动开始:

public function executeTrackReferrals(sfWebRequest $request){
       $userId = $this->getUser()->getId();       
       $this->pager = new sfDoctrinePager('referral', sfConfig::get('app_pager'));
       $this->pager->setQuery(Doctrine_Core::getTable('Referral_submissions')->getUsersSubmissions($userId));
       $this->pager->setPage($request->getParameter('page', 1));
       $this->pager->init();}

主索引页:

<?php 
    include_partial('<a bunch of other includes >');
    include_partial('referral/rtsIndex', array('pager' => $pager));  
?>

_rtsIndex 部分:

<table>
<?php foreach ($pager->getResults() as $r => $referral): ?>
<?php 
    $referralObject = Doctrine_Core::getTable('referral')->getReferralObjectById($referral->getId()); 
    $submissionObject = Doctrine_Core::getTable('referral_submissions')->getObjectByReferralId($referralObject->getId()); 
?> 
<TR VALIGN=TOP> 
            <td WIDTH=10% ALIGN="center" class="_7">
            <P ALIGN=CENTER>
                <script type='text/javascript'>
                    $('.popup_changestatus').click(function(){
                    // put the row id into the hidden field in the popup
                      var rowId = $(this).parent().find('span.row_id').html();
                      $('test').val(rowId);
                    fg_popup_form("fg_formContainer","fg_form_InnerContainer","fg_backgroundpopup");
                    return false;
                    });
                </script>

                <a href="#" class="popup_changestatus">
                    <?php echo utilities::getStatusCode($submissionObject->getCandidateStatus()); ?>
                </a>
                <span class="row_id" style="display: none">
                    <?php echo $referral->getId() ?>
                </span>

            </P>
        </td>
</TR>
</table>

上面提到的Javascript弹出表单代码,包括这一行:

<?php  include_partial('referral/changeStatusCodeForm'); ?>

上面一行渲染了实际的 symfony 表单:

_changeStatusCodeForm 部分:

<?php
$object = new referral_submissionsForm(<this is where I need to pass an ID for each popup form>);
echo $object;
?>

谁能引导我朝着正确的方向前进?

如果对实际的 javascript 代码感兴趣,这是一个非常漂亮的开源弹出窗口: http://www.html-form-guide.com/contact-form/simple-modal-popup-contact-form.html

编辑: 这是contactform-code.php的内容:

<script type='text/javascript' src='/project/misc/simple-popup-form-1/scripts/gen_validatorv31.js'></script>
<script type='text/javascript' src='/project/misc/simple-popup-form-1/scripts/fg_ajax.js'></script>
<script type='text/javascript' src='/project/misc/simple-popup-form-1/scripts/fg_moveable_popup.js'></script>
<script type='text/javascript' src='/project/misc/simple-popup-form-1/scripts/fg_form_submitter.js'></script>
<div id='fg_formContainer'>
    <div id="fg_container_header">
        <div id="fg_box_Title">Change Status</div>
        <div id="fg_box_Close"><a href="javascript:fg_hideform('fg_formContainer','fg_backgroundpopup');">Close(X)</a></div>
    </div>

    <div id="fg_form_InnerContainer">
    <form id='contactus' action='javascript:fg_submit_form()' method='post' accept-charset='UTF-8'>

    <input type='hidden' name='submitted' id='submitted' value='1'/>
    <input type='hidden' name='<?php echo $formproc->GetFormIDInputName(); ?>' value='<?php echo $formproc->GetFormIDInputValue(); ?>'/>
    <input type='text'  class='spmhidip' name='<?php echo $formproc->GetSpamTrapInputName(); ?>' />
    <div class='short_explanation'>* required fields</div>
    <div id='fg_server_errors' class='error'></div>
    <div class='container'>

        <?php 
//        $form = new referral_submissionsForm();
          include_partial('referral/changeStatusCodeForm'); 
        ?>
</form>
</div>
</div>

【问题讨论】:

    标签: php javascript ajax symfony1 symfony-1.4


    【解决方案1】:

    首先,您不应该在模型中直接使用Doctrine_Core。最好的方法是在将查询传递给寻呼机时在 2 个表上创建一个 leftJoin。然后,在您的模板中,您只需获取关系(如 $object-&gt;getRelation())。

    关于您的问题,您应该在构建 &lt;div id='fg_formContainer'&gt; 时传递 ID,因为它是您的弹出窗口的内容。部分来自这个文件:contactform-code.php.

    告诉我们你在哪里建造这个div,你就会有你必须通过id的地方。

    编辑:

    好吧,我终于明白你的问题了。您的页面上有一个弹出定义,可以在每行的每次点击时调用。而且您想知道如何将行 ID 传递给全局弹出窗口。

    这可以在 javascript 中完成。而不是:

    <a href='javascript:fg_popup_form("fg_formContainer","fg_form_InnerContainer","fg_backgroundpopup" );'>
      <?php echo utilities::getStatusCode($submissionObject->getCandidateStatus()); ?>
    </a>
    

    你可以更好地使用:

    <a href="#" class="popup_contact">
      <?php echo utilities::getStatusCode($submissionObject->getCandidateStatus()); ?>
    </a>
    <!-- use this hidden span to put the row id, to be able to retrieve it using jQuery -->
    <span class="row_id" style="display: none">
      <?php echo $referral->getId() ?>
    </span>
    

    然后,使用 jQuery 定义一个动作(例如):

    $('.popup_contact').click(function() {
      // put the row id into the hidden field in the popup
      var rowId = $(this).parent().find('span.row_id').html();
      $('#submitted').val(rowId);
    
      fg_popup_form("fg_formContainer", "fg_form_InnerContainer", "fg_backgroundpopup");
      return false;
    })
    

    【讨论】:

    • 我试图不在我的模型中使用 Doctrine_Core;我很高兴你也向我展示了如何做到这一点。谢谢。关于另一个,我已经更新了原始问题以包含contactform-code.php的内容
    • 感谢您迄今为止的帮助。我有点不清楚 jQuery 动作的放置位置。在定义 的页面头部的脚本标记中?
    • 如果是这样,这样做会完全破坏弹出窗口。弹出窗口根本没有被拉起。顺便说一句:你是对的,你确实明白我想要达到的目标。
    • 您的操作确实在我的网址中放置了一个非常小的“#”。 :)
    • 通过注释掉这些行: var rowId = $(this).next('span.row_id').val(); $('#submitted').val(rowId);我能够恢复弹出窗口,因此对弹出窗口的调用有效,它只是上面两行中它不喜欢的内容。
    猜你喜欢
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多