默认的单选按钮被选中,但下拉不能正确显示
我有一个网站,上面有一张信用卡付款表格,我用在其他非常相似的网站上。我遇到的一个问题是,当页面加载时,信用卡付款选项会自动选中,通常会显示信用卡的下拉列表。但是,在此站点上,直到在显示为已选中的单选按钮上发生第二次单击之前,列表才会显示。如果有人有任何可能导致这种情况的信息,我会非常感激!如果您将任何内容添加到购物车并查看购物车页面,则可以在www.seed-city.com
(NSFW)处看到该问题。感谢您的时间。默认的单选按钮被选中,但下拉不能正确显示
你可以看到这里的问题:
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;
}
}
你有一个选择,没有项目:
<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
),而不是等待第一个事件被触发。
你好,谢谢你的回复。非常感谢!所以,发生的事情是它正在加载,但由于有2个或更多的信用卡付款选项的潜力,它不会加载信用卡列表,并需要再次点击。你能给我一个提示,告诉我如何在页面加载后手动调用该函数吗?我包含了一些我认为相关的代码,并且是脚本的来源。 – Natastna2 2012-08-13 18:59:58
我注意到,在购物车加载后(使用合适的订单数量),看起来好像可能会有一些javascript加载付款信息。我的意思是,它在页面本身完成加载后似乎弹出到屏幕中。如果调用'changeCreditCardList();'手动修正问题,则需要在加载信用卡表单后的某个时间调用它。因此,无论脚本加载该CC表单,在某个地方,作为最后一个操作,调用加载信用卡列表的函数(可能是'changeCreditCardList()')。 – jwatts1980 2012-08-13 19:57:52
谢谢。您的意见非常有帮助,我已经解决了这个问题。 – Natastna2 2012-08-13 21:33:56
你有任何可以与我们分享的代码吗?您是否检查过调试器,以查看页面加载过程中是否有错误? – 2012-08-13 18:31:03
这看起来像垃圾邮件... – 2012-08-13 18:39:06
请关注该网站的内容并提供SFW代码示例。 – 2012-08-13 18:40:21