0

興味深い問題があります。ランナーがレースにサインアップするためのフォームを作成しました。このフォームを使用すると、ユーザーは複数のランナーを追加して、一度にすべてサインアップできます。追加のランナー機能は、jQueryを使用してプログラムされます。

これがランナーを追加するjQueryです...

<script type="text/javascript">
var current= 1;
$(document).ready(function() {
    $("#addrunner").click(function() {
        current++;
        $newrunner= $("#runnerTemplate").clone(true).removeAttr("id").prop("id", "fieldSet" + current).insertBefore("#runnerTemplate");
        $newrunner.find("input").each(function(i) {
            var $currentElem= $(this);
            $currentElem.prop("name",$currentElem.prop("name")+current);
            $currentElem.prop("id",$currentElem.prop("id")+current);
        });
        $newrunner.find("select").each(function(i) {
            var $currentElem= $(this);
            $currentElem.prop("name",$currentElem.prop("name")+current);
            $currentElem.prop("id",$currentElem.prop("id")+current);
        });
        var f = $("#fieldSet"+current);
        f.html(f.html().replace("fieldSetID", "fieldSet"+current));
        $newrunner.appendTo("#mainField");
        $newrunner.removeClass("hideElement");


        var prevvalue=$("#count").prop("value");
        $("#count").prop("value",prevvalue+","+current);

        });


});
</script>

フォームは基本的なhtmlフォームです。

ユーザーがイントラネットを使用していない限り、フォームは意図したとおりに機能します。ユーザーがイントラネットを使用している場合、フォームは最初のランナーのみを送信します。jQueryを介して追加されたすべての追加ランナーのデータは、送信時に転送されません。これは私を混乱させるものです。ここで自宅で作業すると、問題なく完全に機能します。ただし、イントラネット上の自分のオフィスからそれを使用するクライアントでは、最初のランナーは機能しますが、追加された追加のランナーは機能しません。

どんな助けでも歓迎されます。ありがとうございました。

4

1 に答える 1

0

一部のブラウザはDOMオブジェクトに特別なセキュリティを備えているため、オブジェクトをhtmlに変換してから、ID /名前を置き換える必要があります。フィールドに非表示のテンプレートを使用することをお勧めします。以下の機能コードに従ってください:

javascript getTimeに基づく一意のID、およびバックエンドで取得するためのデータの簡単なグループ

<script type="text/javascript" charset="utf-8">
jQuery(document).ready(function($){
    $('a[clone_nested]').on('click', function(){
        // div#runner_build
        var clone_build = $('#' + $(this).attr('clone_nested') + '_build');

        // div#runner_clone
        var clone_placeholder = $('#' + $(this).attr('clone_nested') + '_clone');
        var clone_object = $('.nested_fields:first', $(clone_build)).clone();

        $(clone_object).html($(clone_object).html().replace(/clone_key/g, (new Date().getTime())));
        $(clone_object).find('input[name*="_destroy"]').val(false).end().hide();
        $(clone_placeholder).before($(clone_object));
        $(clone_object).slideDown();
    });
});
</script>

<div>
    <div id="runner_build">
        <div class="nested_fields">
            <input type="text" name="runners[clone_key][name]" value="" id="runner_clone_key_name">
            <input type="text" name="runners[clone_key][address]" value="" id="runner_clone_key_address">
            <input type="text" name="runners[clone_key][phone]" value="" id="runner_clone_key_phone">
            <input type="hidden" name="runners[clone_key][_destroy]" value="true" id="runner_clone_key__hidden">
        </div>
    </div>
    <div id="runner_clone"></div>
    <a href="javascript:void(0)" clone_nested="runner">add runner</a>
</div>

<?php
unset($_REQUEST['runners']['clone_key']);
foreach($_REQUEST['runners'] as $runner){
    if($runner['_destroy'] == true){ continue; }    
}
?>
于 2012-07-12T01:39:06.637 に答える