Уточните селектор jQuery для выбора правильного элемента ввода - PullRequest
1 голос
/ 22 ноября 2011

У меня есть функция, которая записывает значение из выбора на вход. Я использую функцию live ("change", чтобы вызвать это.

if ($(this).val( ) == 'MyValue') {$(".my_input").val(VarValue);}

Это работает нормально, но мне нужно нацелить ближайший вход, чтобы он записывал только на этот вход, а не на все. То, что я попробовал ниже, не работает. Пожалуйста, помогите, если можете, спасибо.

if ($(this).val( ) == 'MyValue') {$(this).closest(".my_input").val(VarValue);}

UPDATE

Вот ссылка на Jsfiddle, обратите внимание, функциональность здесь не работает, но вы можете увидеть мой HTML. http://jsfiddle.net/clintongreen/9x6kv/

Ответы [ 4 ]

1 голос
/ 22 ноября 2011

Ваша скрипка, но она работает: Нажмите здесь

У вас возникла проблема с вашим js - Изменить:

$(".clone_dept").live("change", function() { //<-- not really sure why live isn't working
    if ($(this).val() == 'Dept #1') {$(".clone_attendees").val(dept_1);}
    if ($(this).val() == 'Dept #2') {$(".clone_attendees").val(dept_1);}
    if ($(this).val() == 'Dept #3') {$(".clone_attendees").val(dept_1);}
    if ($(this).val() == 'Dept #4') {$(".clone_attendees").val(dept_1);}
    if ($(this).val() == 'Dept #5') {$(".clone_attendees").val(dept_1);}
    }).change(); // trigger once if needed
}); // <-- This shouldnt be here

до:

$(".clone_dept").change(function() {
    if ($(this).val() == 'Dept #1') {$(".clone_attendees").val(dept_1);}
    if ($(this).val() == 'Dept #2') {$(".clone_attendees").val(dept_2);}
    if ($(this).val() == 'Dept #3') {$(".clone_attendees").val(dept_3);}
    if ($(this).val() == 'Dept #4') {$(".clone_attendees").val(dept_4);}
    if ($(this).val() == 'Dept #5') {$(".clone_attendees").val(dept_5);}
}).change(); // trigger once if needed

Хотя на самом деле это не касается того, как выбрать ближайший вход. В случае вашей скрипки, это единственный элемент, который использует этот класс. Если эта структура строк будет скопирована и использована повторно, используйте ее для выбора правильного ввода.

if($(this).val() == 'Dept #1') {$(this).parent().next("td").children(".clone_attendees").val(dept_1);}

Edit: Еще лучше, используйте массив для назначения правильного значения, вместо того, чтобы иметь 5 строк if if.

var dept = ["Person #1, Person #2, Person #3, Person #4, Person #5","Person #6, Person #7, Person #8, Person #9, Person #10","Finance Persons","IT Persons","Marketing Persons"];

добавить значения в теги параметров

<option value=0>Dept #1</option>

, а затем

$(".clone_dept").change(function() {
    if($(this).val() == 'Dept #1') {
        $(this).parent()
        .next("td")
        .children(".clone_attendees")
        .val(dept[$(this).val()])
    }
}).change(); // trigger once if needed
1 голос
/ 22 ноября 2011

ОБНОВЛЕНИЕ: окончательный код (если кому-то нужно)

$(document).ready(function(){
var $theme = $("#clonned").clone();
// The Function in Question
var dept_1 = "Person #1, Person #2, Person #3, Person #4, Person #5";
var dept_2 = "Person #6, Person #7, Person #8, Person #9, Person #10";
var dept_3 = "Finance Persons";
var dept_4 = "IT Persons";
var dept_5 = "Marketing Persons";

$(".clone_dept").live("change", function() {
    if ($(this).val() == 'Dept #1') {
        $(this).closest("tr").find("td:eq(1) .clone_attendees").val(dept_1);
    }
    if ($(this).val() == 'Dept #2') {
        $(this).closest("tr").find("td:eq(1) .clone_attendees").val(dept_2);
    }
    if ($(this).val() == 'Dept #3') {
        $(this).closest("tr").find("td:eq(1) .clone_attendees").val(dept_3);
    }
    if ($(this).val() == 'Dept #4') {
        $(this).closest("tr").find("td:eq(1) .clone_attendees").val(dept_4);
    }
    if ($(this).val() == 'Dept #5') {
        $(this).closest("tr").find("td:eq(1) .clone_attendees").val(dept_5);
    }
}).change(); // trigger once if needed
// Clone Function
$(".tr_clone_add").live('click', function() {
    var $newone = $theme.clone();
    $newone.attr("id", "clonned"+Math.floor(Math.random()*11));
    $newone.appendTo('.table_clone');
});
});
0 голосов
/ 22 ноября 2011

Если предположить, что вход в DOM следующий, это должно работать:

if ($(this).val( ) == 'MyValue') {$(this).next().val(VarValue);}
0 голосов
/ 22 ноября 2011

, если вы уверены, что есть хотя бы один, вы можете попробовать

if ($(this).val( ) == 'MyValue') {$(".my_input").eq(0).val(VarValue);}

, который получает первое из набора, но у него нет представления о «ближайшем»

первый брат?попробуйте

if ($(this).val( ) == 'MyValue') {$(this).siblings(".my_input").eq(0).val(VarValue);}

, но это все равно будет появляться перед вашим.полностью зависит от того, что означает «ближайший»

...