未更改时选择未触发的焦点

时间:2012-12-05 11:26:45

标签: javascript jquery select focusout

当输入框获得焦点时,我试图用选择列表替换输入框。 如果没有任何改变,则恢复到旧值。

这一切都像预期的那样工作但是当我只关注输入框然后点击聚焦事件之外的某个地方时没有被激活。

这是设计还是我做错了什么?

HTML:

<div id=test>
     <input type=text class=edit value=3 >
     <input type=hidden class=temps>
</div>​

和剧本:

$(function (){
    editfocus();     
    editout();            
});

function editfocus(){    
    $('.edit').unbind('focusin');
    $('.edit').bind('focusin', function() {
    console.log(this);
    var previous = this.value;
    $(this).siblings('.temps').val(previous);
    parentid=$(this).parent()[0].id;
    $('#'+parentid).children('.edit').replaceWith('<select class="edit listme" ><option value=1 >one</option><option value=2 >two</option></select>');
        editout();
    });
}
function editout(){
    $('.edit').unbind('focusout');
    $('.edit').bind('focusout', function() {
        parentid=$(this).parent()[0].id;
        oldval=$(this).siblings('.temps').val();
        $('#'+parentid).children('.edit').replaceWith('<input type=text class=edit   value="'+oldval+'" />');
        editfocus();
    });
}    ​

还请看这个jsfiddle: http://jsfiddle.net/mandropil/f9jN3/

1 个答案:

答案 0 :(得分:1)

通过在替换文本输入后手动聚焦选择元素,可以很容易地解决这个问题。

所以在editOut()函数中的editfocus()之前,只需放置:

$('select').focus();