2013-04-25 3 views
0

У меня есть следующий код, который запускается в конце длинного стола, который имеет несколько button.enter-match элементов:Как получить родительский объект первого объекта jQuery?

$("button.enter-match") 
.button() 
.on('click', function() { 
    $("form.enter-match").dialog({ 
     modal: true, 
     height: 'auto', 
     width: 200, 
     close: function() { 
      $("form.enter-match input[name='code']").val(''); 
     }, 
     open: function() { 
      $("form.enter-match input[name='code']").val('').focus(); 
     }, 
     buttons: { 
      Set: function() { 
       pid = $(this).parents("[data-pid]").data('pid'); 

       if ($("form.enter-match input[name='code']").val() == '') { 
        alert('Code empty!'); 

        return false; 
       } 

       $.post(
        request_url, 
        { 
         'action': 'set_match', 
         'pid': pid, 
         'code': $("form.enter-match input[name='code']").val() 
        }, 
        function (data) { 
         error_handler(data); 

         if (data['error'] == null) { 
          $("tr#pid-" + pid + " td.code:first div").html('<i>' + $("form.enter-match input[name='code']").val() + '</i>'); 
          $("form.enter-match").dialog('close'); 
         } 
        }, 
        'json' 
       ); 
      } 
     } 
    }); 
}); 

Линия pid = $(this).parents("[data-pid]").data('pid'); не получает значение pid данных, поскольку form#enter_match создается на самом верху документ для повторного использования в коде по мере необходимости. Поэтому он не будет иметь родителя с атрибутом [data-pid], однако button.enter-match будет. Как мне получить значение в [data-pid] для этого button.enter-match с части кода $("form.enter-match").dialog()?

+2

Идентификаторы должны быть уникальными в документе, если вы собираетесь копировать кусок HTML, у вас не должно быть никаких идентификаторов. Ваши селекторы просто не будут работать иначе. Вместо этого вы должны дать эти элементы описательным классам. –

+0

@PaoloBergantino - Вы полностью правы, что идентификатор должен быть уникальным, однако селектор, который указывает тэг и идентификатор _will_, все еще работает. (Селектор, который использует только идентификатор, найдет только один, точно так же, как 'getElementById()' находит только один.) – nnnnnn

+5

@nnnnnn - не защищать плохую практику/недействительный HTML, это просто не должно быть сделано => http://stackoverflow.com/questions/5611963/can-multiple-different-html-elements-have-the-same-id-if-theyre-different-types – PlantTheIdea

ответ

0

Не удалось найти способ получить следующий объект, поэтому я просто переместил pid = $(this).parents("[data-pid]").data('pid'); в следующую область под строкой .on('click', function() {, которая решила проблему во всех случаях.

Спасибо всем, кто указал на мою плохую практику кодирования относительно идентификаторов и классов. Я обновил свой стиль кодирования, чтобы отразить лучшие принципы.

Смежные вопросы