каскадные значения в иерархии ul> li с закрытием javascript / jquery - PullRequest
3 голосов
/ 04 декабря 2010

У меня есть иерархия ul> li> ul> li.Каждый li имеет текстовое поле ввода, связанное с ним.Я хочу прикрепить обработчики событий onchange к каждому элементу ввода, чтобы при изменении этого элемента все последующие дочерние элементы ввода также наследовали это значение.Я хочу реализовать замыкание вокруг самой внутренней функции .bind для каждого элемента, чтобы я мог передать родительский ввод значение во время выполнения.Как лучше всего это сделать?

var $generatedFeatureTree = $('.generated','#feature_weights');

// Get all input text boxes in the top level div
var generatedWeights = $generatedFeatureTree.find('input[type="text"]');

for(var i =0; i< generatedWeights.length; ++i){

    var $this = $(generatedWeights[i]);
    var value = $this.val();

    $this.bind('change',function(value){
        $$this = $(this);

        // get all children input elements of this node by traversing a parent 'li'
        // and getting the lone 'ul' child
        var children = $$this.parent('li').children('ul').find('input[type="text"]');

        for(var j=0;j<children.length;++j){
            $$$this = $(children[j]);
            $$$this.val(value);
        }
    });

    }

1 Ответ

3 голосов
/ 04 декабря 2010

Может быть, я неправильно понимаю, что вы хотите, но я думаю, что у вас есть сверхмощное решение. Не могли бы вы просто сделать это так?

var myInputs = $('input[type=text]');  //use whatever selector you need to grab ALL textboxes
myInputs.change(function() {
    $(this).siblings('ul').find('input[type=text]').val($(this).val());
});

Для вас не имеет значения, на каком уровне находится вход, все, что вам нужно сделать, это установить все входы ниже этого на одно и то же значение. Таким образом, вы можете прикрепить одну и ту же функцию изменения ко всем входам. Моя функция просто ищет <ul>, который является родственным для ввода, находит все текстовые поля в этом <ul> и устанавливает для них то же значение, что и в родительском текстовом поле. Я думаю, это то, чего вы хотели достичь.

Вот живая демонстрация этого: http://jsfiddle.net/Ender/wXqcE/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...