2012-12-12 321 views
1

所以我想讓用戶點擊一個按鈕的按鈕值包含問題編號和div ID。然後我試圖使用該題號訪問文本是在具有ID question_no「+ _文字我應該得到的文本行是一個跨度:jQuery .text()函數不工作

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

的問題是它是工作的一半時間會搶了一些跨度,但不是別人的文字

HHere是我寫的劇本:。

$("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> 

它正確地從第二個問題簽名,但不是第一個問題,代表標題完成本節。

在文字與輸入一起被抓住之後,我只是把它們放在一個表格中。

任何想法爲什麼這隻會抓住文本每隔一段時間?

+0

它不能「一半工作」。我建議在您的點擊事件中放置一個斷點,並檢查您嘗試使用的選擇器是否正確。 – sdespont

+0

問題在這裏 - >'var div = $(this).attr(「data-version」);'。因爲在第一個塊中,你應該使用'data-app_type_version =「1527」'而不是'data-version'。這意味着你不能'引用div'。解決這個問題,你會沒事的。 – Ohgodwhy

+0

它們在代碼中實際上是相同的,這只是我在將其輸入堆棧溢出時發生的錯誤。我已經編輯 – Beamer180

回答

1

其中一個按鈕的屬性爲'data-version',另一個爲'data-app_type_version'。它們應該和你在JS(目前的數據版本)中引用的一樣:) :)

+0

它們在代碼中實際上是相同的,這只是我在將其輸入堆棧溢出時發生的錯誤。我編輯過的帖子 – Beamer180

0

因爲,你知道span是div的直接子,也許你可以使用「>」使其成爲直接後代選擇器而不是泛型後代選擇器。 var text = $(「div#」+ div +「> span#」+ question_no +「_text」)。text();

+0

還是沒有運氣... – Beamer180

+0

是你的html很乾淨嗎?有時候,不驗證的HTML可能會拋出JQuery。 任何方式,你可以私人消息我鏈接到一個地方,我可以看到它?如果你更喜歡電子郵件...我的地址是我的堆棧溢出用戶名@ gmail.com – rnirnber