-3

他の非常によく似たWebサイトで使用したクレジットカード支払いフォームが記載されたWebサイトがあります。ページが読み込まれると、クレジットカード支払いオプションが自動的に選択され、通常はクレジットカードのドロップダウンリストが表示されるという問題があります。ただし、このサイトでは、すでに選択されていると表示されているラジオボタンを2回クリックするまで、リストは表示されません。何がこれを引き起こしているのかについて誰かが何か情報を持っているなら、私は本当に感謝しています!カートに何かを追加してカートページを表示すると、www.seed-city.comNSFW )で問題が発生する可能性があります。お時間をいただきありがとうございます。

ここで問題を確認できます。

http://www.seed-city.com/index.php?option=com_virtuemart&page=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;

    }

}
4

1 に答える 1

0

アイテムのない選択があります:

<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最初のイベントが発生するのを待つのではなく、ページの読み込み後に手動で関数の1つ(など)を呼び出す必要があります。

于 2012-08-13T18:50:03.847 に答える