2011-11-10 24 views
0

我有一組複選框,每個複選框都有一個與其關聯的下拉列表。當用戶點擊複選框時,複選框值將被下拉併發送到服務器。jQuery .next()在表中不工作

我原本每個都有一個ul,但是把它改成了一個表格來保持下拉列表的排列。在我這樣做後,下一個功能停止工作。請求中的var甚至消失。如果我硬編碼一個值,它會顯示備份。

下面是函數:

$(document).delegate('.cbxAmenity', 'click', function() { 
    $("#dialogNotify").append(" Saving...").dialog(); 

    var thisAmenity = (this.id).replace("AmenityList_", ""); 

    $.ajax({ 
     url: 'ajax_url.php', 
     dataType: 'json', 
     data: { 
      ResortId: $("#id").val(), 
      action: 'save', 
      amenity: thisAmenity, 
      locality: $(this).next().val() // if i change to 'foo' it works 
     }, 
     success: function() { 
      $("#dialogNotify").dialog("close"); 
      ui.amenityDialog(); 
     }, 
     error: function() { 
      $("#dialogNotify").html("There was an error saving amenity"); 
     } 
    }); 

編輯:下面是表...它的另一個Ajax調用產生:

$("#dialogAmenity").html("<table id='amenityList'><tr><th>Amenity</th><th>Locality</th></tr>"); 
       for(var index=0; index<amenities.length; index++) { 
        $("#amenityList").append("<tr><td><input type='checkbox' name='AmenityList_"+ 
              amenities[index].AmenitiesID + "' id='AmenityList_"+ 
              amenities[index].AmenitiesID + "' class='cbxAmenity' /> "+ 
              amenities[index].Name + 
              "</td><td><select id='locality' name='locality'>"+ 
              "<option value='RESORT'>Resort</option>" + 
              "<option value='NEARBY'>Near by</option>" + 
              "</select></td></tr>"); 

        if (amenities[index].link == true) 
         $("#AmenityList_"+amenities[index].AmenitiesID).prop('checked', true); 

       } 
       $("#dialogAmenity").append("</table>"); 

再次編輯:下面是來自螢火蟲

的HTML
<table id="amenityList"> 
    <tbody> 
    <tr> 
     <th>Amenity</th> 
     <th>Locality</th> 
    </tr> 
    <tr> 
     <td> 
     <input name="AmenityList_1" id="AmenityList_1" class="cbxAmenity" type="checkbox"> Indoor Pool 
     </td> 
     <td> 
     <select id="locality" name="locality"> 
      <option value="RESORT">Resort</option> 
      <option value="NEARBY">Near by</option> 
     </select> 
     </td> 
    </tr> 
    <tr> 
     <td> 
     <input name="AmenityList_2" id="AmenityList_2" class="cbxAmenity" type="checkbox"> Fitness Gym 
     </td> 
     <td> 
     <select id="locality" name="locality"> 
      <option value="RESORT">Resort</option> 
      <option value="NEARBY">Near by</option> 
     </select> 
     </td> 
    </tr> 
    <tr> 
     <td> 
     <input name="AmenityList_3" id="AmenityList_3" class="cbxAmenity" type="checkbox"> Beach Access 
     </td> 
     <td> 
     <select id="locality" name="locality"> 
      <option value="RESORT">Resort</option> 
      <option value="NEARBY">Near by</option> 
     </select> 
     </td> 
    </tr> 
    <tr> 
     <td> 
     <input name="AmenityList_4" id="AmenityList_4" class="cbxAmenity" type="checkbox"> Laundry Room 
     </td> 
     <td> 
     <select id="locality" name="locality"> 
      <option value="RESORT">Resort</option> 
      <option value="NEARBY">Near by</option> 
     </select> 
     </td> 
    </tr> 
    </tbody> 
</table> 
+2

你可以發表''html嗎? – fncomp

+0

剛剛更新... – guyfromfl

+0

這是一個創建表格的腳本。你能展示一個最終創建的表格的例子嗎? –

回答

2

元素與cbxAminity類是<td>標籤的最後一個元素。因此,它沒有next()元素。你需要做的

$(this).parent().next().find('select').val();

爲了找到<select>元素在未來<td>

+0

做到了。我想知道是否在td容器內有效果,但不知道如何擺脫它大聲笑...謝謝 – guyfromfl

+0

+1有趣的是,在我回答這個問題之前,我看到了另一個問題,同樣的問題。 –

2

您的表格創建腳本包含一個缺陷。您不能以這種方式附加結束標籤$(...).append("</table>")

var html = "<table id='amenityList'><tr><th>Amenity</th><th>Locality</th></tr>"); 
    for(var index=0; index<amenities.length; index++) { 
    html += "<tr><td><input type='checkbox' name='AmenityList_"+ 
      amenities[index].AmenitiesID + "' id='AmenityList_"+ 
      amenities[index].AmenitiesID + "' class='cbxAmenity'" + 

      (amenities[index].link == true ? "checked='checked'" : "") + 

      "/> "+ 
      amenities[index].Name + 
      "</td><td><select id='locality' name='locality'>"+ 
      "<option value='RESORT'>Resort</option>" + 
      "<option value='NEARBY'>Near by</option>" + 
      "</select></td></tr>"); 

    } 
    html += "</table>"; 
    $("#dialogAmenity").html(html); 
+0

當我添加$螢火蟲有這樣說:$(this.id).replace是不是一個函數 http:// url/ 行374 – guyfromfl

+0

@guyfromfl我明白了。不要忘記我的第一個建議,刪除這些括號,因爲它們已經過時。相反,看看我建議的表生成代碼。 –

+0

已將其更改爲您的建議,但它並未創建該var。 – guyfromfl