如何在文本框旁边存储span标记?

时间:2012-04-04 14:53:17

标签: javascript jquery

下面我有一个javascript代码,其中应该发生的是它附加文本框和文本框旁边的[Open Grid](在一个范围内)。文本框存储在一个数组+“[]”中,所以我尝试使用.after()在文本框之后放置span,但问题是即使显示文本框,它也不会显示span [Open Grid]。如何才能在文本框旁边显示超链接?

以下是代码:

    <script>

    $(document).on('click','.showGrid', function(e) {

        $(".gridBtns").removeClass("gridBtnsOn");

        var value = $(this)
            .siblings('input[name=gridValues]').val();

        $("#btn" + value.replace(/\s/g, '')).addClass("gridBtnsOn");

        $('.optionTypeTbl').fadeToggle('slow');
        $(this).parent().append($('.optionTypeTbl'));
        $('.optionTypeTbl').css({

            left: $(this).position().left,
            top: $(this).position().top + 20

        });

        e.stopPropagation();

    });


        function insertQuestion(form) {   

        var context = $('#optionAndAnswer');

        var $tbody = $('#qandatbl > tbody'); 
        var $tr = $("<tr class='optionAndAnswer' align='center'></tr>");
        var $options = $("<td class='option'></td>");

        $('.gridTxt', context).each( function() {

var $this = $(this);
var $optionsText = $("<input type='text' class='gridTxtRow maxRow' readonly='readonly' />")
    .attr('name',$this.attr('name')+"[]")
    .attr('value',$this.val())
    .appendTo( $options )
    .after("<span href='#' class='showGrid'>[Open Grid]</span>");

    $questionType = $this.val();


        });

        $tr.append($options);    
        $tbody.append($tr); 

        }

    </script>


    <form id="QandA" action="insertQuestion.php" method="post" >


    <table id="optionAndAnswer" class="optionAndAnswer">
    <tr class="option">
    <td>Option Type:</td>
    <td>
    <div>
        <input type="text" name="gridValues" class="gridTxt maxRow" readonly="readonly" />
        <span href="#" class="showGrid" id="showGridId">[Open Grid]</span>
    </div>
    <table class="optionTypeTbl">
    <tr>

        <?php
        $i = 1;
        foreach($num as $key => $val){
            if($i%7 == 1) echo"<tr><td>";
            echo"<input type=\"button\" value=\"$val\" id=\"btn".$val."\" name=\"btn".$val."Name\" class=\"gridBtns gridBtnsOff\">";        
            if($i%7 == 0) echo"</td></tr>";
            $i++;
        }
        ?>

            </tr>
            <tr>
            <td>
            <input class="gridBtns" name="btnTrueorFalseName"  id="btnTrueorFalse"  type="button"  value="True or False"  />
            <input class="gridBtns" name="btnYesorNoName"  id="btnYesorNo"  type="button"  value="Yes or No"  />
            </td>
            </tr> 
            </table>

            </td>
    </tr>
    </td>
    </tr>
    </table>


    </form>

2 个答案:

答案 0 :(得分:1)

这是因为你的:

var value = $(this)
            .siblings('input[name=gridValues]').val();

实际上是:

var value = $(this)
            .siblings('input[name=gridValues[]]').val();

试试这个。如果不。然后有.map() - 我以前没用过,但我们可以一起看看......


更新

你甚至可能需要:

var value = $(this)
            .siblings('input[name=gridValues\\[\\]]').val();

答案 1 :(得分:0)

var $this = $(this);
var $optionsText = $("<input type='text' class='gridTxtRow maxRow' readonly='readonly' />")
    .attr('name',$this.attr('name')+"[]")
    .attr('value',$this.val())
    .appendTo( $options )
    .after("<span class='showGrid'>[Open Grid]</span>");

试试这个