jQuery焦点无法专注于ajax加载的元素

时间:2014-08-27 12:27:19

标签: jquery focus

我做了简单的ajax调用。 e =我点击的元素

<div class="row">
  <div class="order_notes">  
    <div class="order_note add">
      <div class="input"><input type="text" value="" /></div>    
      <div onclick="someFunction(e)">click it</div>
    </div>
    <div class="order_note">note</div>
  </div>
</div>

这个结构加载了ajax,我希望在ajax之后再次关注输入文本

function someFunction(e){
    jQuery.ajax({
        type: "POST",
        url: "/templates/design/inc/al_ajax.php",
        data: { action : 'add_note', order_number: o_num, commentar: com, user_id: user_id},
        beforeSend: function(data){       
        },
        success: function(data){
            e.closest(".row").find(".order_notes").html(data);
            console.log(e.closest(".row").find(".order_notes .add input").length);
            e.closest(".row").find(".order_notes .add input").focus(); 
        }   
    });
}

console.log返回1,因此该元素存在于问题所在的位置。数据是正确的,它正确地改变了order_notes 包括输入的所有内容,所以我需要关注加载的输入

PS:结构更复杂我只是将其简化为例如

2 个答案:

答案 0 :(得分:0)

看看你的控制台。您可能收到以下错误消息:

Uncaught ReferenceError: e is not defined

对于onclick属性,请使用this代替e

<div onclick="someFunction(this)">click it</div>

此外,在success回调函数中,e将是一个DOM对象,而不是一个jQuery对象;因此它将无法使用.closest()

您需要将e转换为jQuery对象,如下所示:

$(e)

演示: http://jsfiddle.net/y6zq55kq/

答案 1 :(得分:0)

所以我无法设置焦点的原因是.closest在ajax加载之后没有在给定的e元素上正常工作所以在我进行ajax调用之前我放入r变量父行

var r = e.closest(".row");

然后我在寻找r

中的元素
r.find(".order_notes .add input").focus(); 

而不是

e.closest(".row").find(".order_notes .add input").focus()