优化jQuery选择器以定位正确的输入元素

时间:2011-11-22 01:08:42

标签: jquery closest

我有一个函数可以将值从select写入输入。我正在使用实时(“更改”,触发此功能。

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

这很好但我需要定位最近的输入,因此它只写入那一个输入而不是所有输入。我在下面尝试过的东西不起作用。如果可以,请帮忙,谢谢。

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

更新

这是一个指向Jsfiddle的链接,请注意,这里的功能不起作用,但你可以看到我的html。 http://jsfiddle.net/clintongreen/9x6kv/

4 个答案:

答案 0 :(得分:1)

更新:最终密码(如果有人需要)

$(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');
});
});

答案 1 :(得分:1)

你的小提琴,但它有效:Click here

你的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);}

编辑: 更好的是,使用数组来分配正确的值而不是5行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

答案 2 :(得分:0)

如果你确定至少有一个,你可以尝试

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

从集合中获取第一个,但它不知道'最接近'

第一个兄弟姐妹?尝试

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

但是,无论如何,这将会出现在您之前的任何内容。完全取决于“最接近”意味着什么

答案 3 :(得分:0)

假设输入是DOM中的下一个,这应该有效:

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