1

だから私はユーザーにボタンをクリックさせようとしています。ボタンの値は質問番号とdivIDを保持しています。次に、その質問番号を使用して、IDがquestion_no "+_textのスパンにあるテキストにアクセスしようとしています。テキストを取得する必要がある行は次のとおりです。

var text=$("div#"+div+" span#"+question_no+"_text").text();

問題は、半分の時間で動作していることです。一部のスパンではテキストを取得しますが、他のスパンでは取得しません。

Hここに私が書いたスクリプトがあります:

$("button.add_answer").click(function() {
    var question_no=$(this).attr("value")
    var div=$(this).attr("data-version");
    var text=$("div#"+div+" span#"+question_no+"_text").text();
    var answer=$("div#"+div+" [name="+question_no+"]");
    var answerText;
    var answerValue;
    var checkbox=false;

    alert($("div#"+div+" span#"+question_no+"_text").length);

    if (answer[0].tagName.toLowerCase() == "input") {
        if(answer.attr("type") == "text") {
             answerText=answer.val();
             answerValue=answer.val();  
        } else if (answer.attr("type") == "radio") {
             var answer=$("div#"+div+" [name="+question_no+"]:checked");
             answerValue=answer.val();
             answerText=answer.next().text();
        } else {
             alert("checkbox");
             checkbox=true;
             $("div#"+div+" [name="+question_no+"]:checked").each(function() {
                 answerText=$(this).next().text();
                 answerValue=$(this).val();
                 $("div#saved_answers table").append("<tr id=\""+question_no+"\"><td>"+text+"</td><td>"+answerText+"</td></tr>");
             });    
        }
    } else if (answer[0].tagName.toLowerCase()=="textarea") {
         answerText=answer.val();
         answerValue=anser.val();   
    } else if(answer[0].tagName.toLowerCase == "select") {
         answerText=answer.find("option:selected").text();
         answerVal=answer.val();    
    }

    if(!checkbox) {
        $("div#saved_answers table").append("<tr id=\""+question_no+"\"><td>"+text+"</td><td>"+answerText+"</td></tr>");
    }

});

そして、ここにマークアップがあります:

<div id="1527" class="Questions">
<h1>Questions</h1><hr><br />


    <ul class="error" id="498_error"></ul>
    <span id="498_text">Title of Representative Completing This Section</span><br />
    <input type="hidden" name="498_max_length" id="498_max_length" value="25">
    <input type="hidden" name="498_min_value" id="498_min_value" value="">
    <input type="hidden" name="498_max_value" id="498_max_value" value="">
    <input type="hidden" name="498_regex_format" id="498_regex_format" value="">
    <input type="hidden" name="498_system_type" id="498_system_type" value="2">
    <input type="hidden" name="498_app_type_version" id="498_app_type_version" value="1527">

            <input class="questionChoice" type="text" name="498" />

    <br />
    <button class="add_answer" value="498" data-version="1527">Add answer</button>
    <br /><br />


    <ul class="error" id="2150_error"></ul>
    <span id="2150_text">Signature:</span><br />
    <input type="hidden" name="2150_max_length" id="2150_max_length" value="">
    <input type="hidden" name="2150_min_value" id="2150_min_value" value="">
    <input type="hidden" name="2150_max_value" id="2150_max_value" value="">
    <input type="hidden" name="2150_regex_format" id="2150_regex_format" value="">
    <input type="hidden" name="2150_system_type" id="2150_system_type" value="2">
    <input type="hidden" name="2150_app_type_version" id="2150_app_type_version" value="1527">

            <input class="questionChoice" type="text" name="2150" />

    <br />
    <button class="add_answer" value="2150" data-version="1527">Add answer</button>
    <br /><br />

</div>

2番目の質問である署名からテキストを正しく取得していますが、最初の質問であるこのセクションを完了する代表者の役職ではありません。

入力と一緒にテキストを取得した後、私はそれらをテーブルに配置しています。

なぜこれがたまにしかテキストを取得しないのかについてのアイデアはありますか?

4

2 に答える 2

1

ボタンの 1 つには属性「data-version」があり、もう 1 つのボタンには「data-app_type_version」があります。それらは、JSで参照するものと同じである必要があります(現時点では「データバージョン」):)

于 2012-12-12T18:03:40.230 に答える
0

スパンが div の直接の子であることはわかっているため、「 > 」を使用して、一般的な子孫セレクターではなく、直接の子孫セレクターにすることができます。

var text=$("div#" + div + "> span#"+ question_no + "_text").text();

于 2012-12-12T18:10:43.907 に答える