默认的单选按钮被选中,但下拉不能正确显示

问题描述:

我有一个网站,上面有一张信用卡付款表格,我用在其他非常相似的网站上。我遇到的一个问题是,当页面加载时,信用卡付款选项会自动选中,通常会显示信用卡的下拉列表。但是,在此站点上,直到在显示为已选中的单选按钮上发生第二次单击之前,列表才会显示。如果有人有任何可能导致这种情况的信息,我会非常感激!如果您将任何内容添加到购物车并查看购物车页面,则可以在www.seed-city.comNSFW)处看到该问题。感谢您的时间。默认的单选按钮被选中,但下拉不能正确显示

你可以看到这里的问题:

http://www.seed-city.com/index.php?option=com_virtuemart &页= shop.cart & add_id [] = 270 & qadd_270 = 10

我的代码是:

<div class="yagendoo_vm_checkout_credit_input"> 
     <table> 
      <tr> 
       <td nowrap width="10%" align="left"><?php echo $VM_LANG->_('VM_CREDIT_CARD_TYPE'); ?>:</td> 
       <td>   
        <script language="Javascript" type="text/javascript"><!-- 
         writeDynaList('class="inputbox" name="creditcard_code" size="1"', 
         orders, originalPos, originalPos, originalOrder); 
         //--> 
        </script> 
        <?php 
         $db_cc->reset(); 
         $payment_class = $db_cc->f("payment_class"); 
         $require_cvv_code = "YES"; 
         if(file_exists(CLASSPATH."payment/$payment_class.php") && file_exists(CLASSPATH."payment/$payment_class.cfg.php")): 
          require_once(CLASSPATH."payment/$payment_class.php"); 
          require_once(CLASSPATH."payment/$payment_class.cfg.php"); 
          $_PAYMENT = new $payment_class(); 
          if(defined($_PAYMENT->payment_code.'_CHECK_CARD_CODE')):?> 
           <?php $require_cvv_code = strtoupper(constant($_PAYMENT->payment_code.'_CHECK_CARD_CODE'));?> 
          <?php endif; 
        endif;?> 
       </td> 
      </tr> 
      <tr valign="top"> 
       <td nowrap width="10%" align="left"> 
        <label for="order_payment_name"> 
         <?php echo $VM_LANG->_('PHPSHOP_CHECKOUT_CONF_PAYINFO_NAMECARD') ?>: 
        </label> 
       </td> 
       <td> 
        <input type="text" class="inputbox" id="order_payment_name" name="order_payment_name" value="<?php if(!empty($_SESSION['ccdata']['order_payment_name'])) echo $_SESSION['ccdata']['order_payment_name'] ?>" autocomplete="off" /> 
       </td> 
      </tr> 
      <tr valign="top"> 
       <td nowrap width="10%" align="left"> 
        <label for="order_payment_number"><?php echo $VM_LANG->_('PHPSHOP_CHECKOUT_CONF_PAYINFO_CCNUM') ?>:</label> 
       </td> 
       <td> 
        <input type="text" class="inputbox" id="order_payment_number" name="order_payment_number" value="<?php if(!empty($_SESSION['ccdata']['order_payment_number'])) echo $_SESSION['ccdata']['order_payment_number'] ?>" autocomplete="off" /> 

更多代码:

 foreach($cards as $code => $name) { 

      $script .= "orders[".$i++."] = new Array('".addslashes($db_cc->f("payment_method_name"))."','$code','$name');\n"; 

     } 



     } 

     $script .= "function changeCreditCardList() { \n"; 

     $script .= "var selected_payment = null; 

    for (var i=0; i<document.adminForm.payment_method_id.length; i++) 

    if (document.adminForm.payment_method_id[i].checked) 

     selected_payment = document.adminForm.payment_method_id[i].id;\n"; 

     $script .="changeDynaList('creditcard_code',orders,selected_payment, originalPos, originalOrder);\n"; 

     $script .="}\n"; 

     $script .="//-->\n"; 

     $script .="</script>\n"; 

     $script .= '<noscript>'.ps_html::selectList('creditcard_code', key($cards), $cards).'</noscript>'; 

     return $script; 

    } 

} 
+1

你有任何可以与我们分享的代码吗?您是否检查过调试器,以查看页面加载过程中是否有错误? – 2012-08-13 18:31:03

+0

这看起来像垃圾邮件... – 2012-08-13 18:39:06

+1

请关注该网站的内容并提供SFW代码示例。 – 2012-08-13 18:40:21

你有一个选择,没有项目:

<select class="inputbox" name="creditcard_code" size="1"> </select> 

的项目是通过脚本加载它

/*<![CDATA[*/var originalOrder = '1'; 
var originalPos = 'payment_method_id_3'; 
var orders = new Array(); // array in the format [key,value,text] 
orders[0] = new Array('payment_method_id_3','VISA','Visa'); 
orders[1] = new Array('payment_method_id_3','MC','MasterCard'); 
orders[2] = new Array('payment_method_id_3','jcb','JCB'); 
orders[3] = new Array('payment_method_id_3','australian_bc','Australian Bankcard'); 
orders[4] = new Array('payment_method_id_3','SWITCH','Maestro'); 
function changeCreditCardList() { 
var selected_payment = null; 
     for (var i=0; i<document.adminForm.payment_method_id.length; i++) 
     if (document.adminForm.payment_method_id[i].checked) 
      selected_payment = document.adminForm.payment_method_id[i].id; 
op_changeDynaList('creditcard_code',orders,selected_payment, originalPos, originalOrder); 
}/*]]>*/ 

上面我假设op_changeDynaList功能应该与阵列加载select。看起来changeCreditCardList可能是onchange处理程序。

再次,这是应该在问题中的东西。但是,我没有看到第一次实际加载列表的位置。您可能需要在页面加载后手动调用其中一个函数(如changeCreditCardList),而不是等待第一个事件被触发。

+0

你好,谢谢你的回复。非常感谢!所以,发生的事情是它正在加载,但由于有2个或更多的信用卡付款选项的潜力,它不会加载信用卡列表,并需要再次点击。你能给我一个提示,告诉我如何在页面加载后手动调用该函数吗?我包含了一些我认为相关的代码,并且是脚本的来源。 – Natastna2 2012-08-13 18:59:58

+0

我注意到,在购物车加载后(使用合适的订单数量),看起来好像可能会有一些javascript加载付款信息。我的意思是,它在页面本身完成加载后似乎弹出到屏幕中。如果调用'changeCreditCardList();'手动修正问题,则需要在加载信用卡表单后的某个时间调用它。因此,无论脚本加载该CC表单,在某个地方,作为最后一个操作,调用加载信用卡列表的函数(可能是'changeCreditCardList()')。 – jwatts1980 2012-08-13 19:57:52

+0

谢谢。您的意见非常有帮助,我已经解决了这个问题。 – Natastna2 2012-08-13 21:33:56