2015-02-19 10 views
0

У меня есть форма, где я изменяю набор полей при изменении полей выбора.JQuery об изменении .closest context?

Мой HTML выглядит следующим образом:

<div class="ajx" id="ajx_1"> 
    <fieldset> 
     <legend>Inhalt</legend> 
     <select id="u_article" ...> 
     ... 
    </fieldset> 
</div> 

Со следующим JQuery работает для всех современных браузеров:

$(".ajx").on("change", function() { 
    var $this = $(this); 
    console.log($this) 

    // ... additional code for understanding what I want to do: 
    var $form = $('form'); 
    var method = $form.attr("method").toUpperCase(); 
    var $this = $(this).closest('.ajx'); 
    var $ser = $(".ajx select").serialize(); 
    var $ser2 = $(".ajx input").serialize(); 

    $.ajax({ 
     url: $form.attr("action"), 
     data: $ser, 
     type: method, 
     success: function(res) { 
      var $fnd = '#' + $this.attr('id') + ' fieldset'; 
      $this.html($(res).find($fnd)); 
     }, 
     error: function (xhr, status) { 
      alert('Unknown error - status: ' + status); 
     } 
    }); 
}); 

В консоли Firefox я могу видеть, что есть объект и контекст Object[div#ajx_1.ajx].

Теперь выше не работает для старых Firefox, как FF7 или FF3.6, потому что мне нужно установить change прямо в соответствующие поля.

Я пробовал с этим JQuery код:

$(".ajx select").on("change", function() { 
    var $this = $(this).closest('.ajx'); 
    console.log($this) 
    // ... 
}); 

Теперь объект является правильным, но когда я открыть объект в консоли я получаю что-то другое в контексте: select#u_article.

Кажется, он выбирает мой select вместо div как элемент здесь.

Почему это и как я могу это изменить?

+1

ли 'u_article' также имеют' .ajx 'класс? – CodingIntrigue

+0

нет, потому что весь «набор полей» заменен, а не только 'select'. – Toby

+0

Я действительно не вижу, как здесь проблема 'context'. Он содержит 'select # u_article', потому что это селектор, который вы передали в обработчике изменений, что является правильным. В любом случае вы не должны полагаться на свойство 'context', оно было устарело в 1.10 и может быть удалено без уведомления - http://api.jquery.com/context/ – billyonecan

ответ

1

После того, как я понял вопрос, я думаю, что у меня есть решение: Установите на место события OnSuccess из Аякса:

$this.find("select").on("change", theChangeFunction); 

Вот это jsFiddle with the complete code

+0

Ваш код 'if ($ this.is (" div.ajx ")) {' true для обоих моих случаев выше, поэтому проблема с более старым Firefox (проверена на FF3.6 и FF7) остается ... – Toby

+0

I Установлены ff3.6 и http://jsfiddle.net/eyg2n5ea/3/. Это див. –

+0

- ваш вопрос, почему это выбор в контексте, когда вы используете $ («. Ajx select»)? –

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

  • Нет связанных вопросов^_^