如何在数组中设置选择元素数组索引并绑定到模糊事件

时间:2013-05-20 07:22:35

标签: javascript jquery

我有一系列选择dom和输入文本框。关于输入的模糊事件(特征索引)想要在相同索引的select dom值中设置元素。

我的绑定正在运行,但在每个模糊事件后,不同的输入框正在重新启动0。

我无法根据给定的索引

设置选择值,即(下拉)

JSFiddle

我的代码正在关注。

$(document).ready(function (){
    var i =1;
    $('#addme').on('click', function(){

        var  test = '<tr class="employee"><td><input type="text" id="emp_id['+i+']" /></td><td><select id="emp_name['+i+']" '
        test += '<option value="-1" >Please Select </option><option value="e0001" >James Smith</option><option value="e0002" >Roger Sm</option>'  
        test +='<option value="e0003" >Elina Lobo</option></select></td></tr>'   

        $('#addme').after(test);
        i++;
    });

    $(".employee input").live('blur',function(){
        var inputIndex = $(this).index();
        var inputValue = $(this).val();
        alert("Input Index is :" +  inputIndex + ' and value is ' + inputValue);

        $('#emp_name[inputIndex]').each(function(){
            if(this.value == inputValue){
                $('#emp_name[inputIndex]').val($(this).val()); 
                    return false;
            }
            alert("Please iput valid value");
            $('#emp_name[inputIndex]').val('-1');
        });
    });
});
    </script>
    <table />
    <tr class="employee">
        <td><input class="employee" type="text" id="emp_id[0]" /></td>
        <td><select id="emp_name[0]" name="emp_name">
            <option value="-1" >Please Select </option>
            <option value="e0001" >James Smith</option>         
            <option value="e0002" >Roger Sm</option>
            <option value="e0003" >Elina Lobo</option>
        </select></td>
    </tr> 

    <input type="button" id="addme" value="ADD ME"/> 

  </body>
 </html> 

提前致谢

2 个答案:

答案 0 :(得分:1)

您需要委派活动,因为您在点击按钮时动态添加元素。

所以$(".employee input").live('blur',function(){

应该看起来像这样

$(staticContainer).on('blur',".employee input", function(){

staticContainer 是元素与元素绑定时已经在DOM中的元素。

更好地接近容器的性能。

您的代码也存在多个问题..

最好将行附加到表中,以便选择器返回表中的右元素。

$('#addme').after(test);

原来是

$('table').append(test);

接下来,此选择器不会替换索引值

$('#emp_name[inputIndex]')

应该是

$('#emp_name[' + inputIndex + ']')

最后,您访问索引的方式完全错误。

您正试图获取与其他元素相对应的当前输入。所以

var inputIndex = $(this).index();

应该看起来像

var inputIndex = $('input').index(this); //这将给出正确的价值。

<强> Check Fiddle

答案 1 :(得分:0)

首先,jQuery .Index()意味着找到e的所有兄弟的索引,而不是选择器字段的索引,如果你想这样做,你需要一个选择器参数。 所以

var inputIndex = $(this).index();

应该改为

var inputIndex = $(this).index(".employee input");

然后您的索引部分将正常工作。

其次,我实际上不明白你的模糊事件代码部分。你说你想设置相同的选择dom索引,为什么你比较值?你使用jQuery属性选择器,我没有看到任何匹配元素。我猜你试图选择所有选择doms,你试着在循环警报?我认为这不是一个好主意。

我认为你应该重建这部分,它没有逻辑,现在很难阅读。