2016-11-07 91 views
-1

的執行我有一個細胞<td>瞭解jQuery的

而且我有jQuery中,當您雙擊它的腳本,它創建了一個<input type="text">這樣的:

$("td").dblclick(function(event){ 
     event.stopPropagation(); 
     if($(event.target).prop("id")!="inputeditar"){ //WHEN I DOUBLE CLICK IN THE CELL 
     // I paste the value of the cell into the value of the input 


      $(document).one("click",function(event2){ //IF I CLICK OUT OF THE INPUT 
      if($(event2.target).prop("id")!="input") 
       { 
       $("#input").remove(); //THEN I REMOVE IT 

       } 
     }); 
     } 


}); 

所以如果我是雙單擊單元格中的空格,然後輸入將從單元格中獲取文本,如果在輸入之外單擊,則會消失。

它工作正常,但如果我點擊輸入(而不是外部),那麼只要我點擊它外面,它將永遠不會消失。我想繼續檢查我是否在外面點擊,然後刪除輸入。

+1

等待......所以,如果您單擊輸入,您希望輸入被刪除?即使他們點擊它來關注它或者在其中選擇文本?這似乎不是一個好主意。 –

+0

嘗試添加片段 – Mahi

+0

如果沒有輸入remove(),否則重新添加'one()'事件。或者當你去除(如果你想保持內聯),使用'on'和'off'。 –

回答

1

添加事件處理程序內的事件通常是一個壞主意,但你可以acheive你想要的東西是這樣的:

$(document).on("click",function(event2) { 
    if ($(event2.target).prop("id")!="input") 
    { 
     //IF I CLICK OUT OF THE INPUT 
     //THEN I REMOVE IT 
     $("#input").remove(); 
     $(document).off("click"); 
    } 
}) 

然而$(document).off("click")似乎是一個真的壞主意

繼KevinB的有關命名事件處理程序,你應該能夠命名空間添加到事件處理程序,並把它作爲需要評論:

$(document).on("click.removeinput",function(event2) { 
    if ($(event2.target).prop("id")!="input") 
    { 
     //IF I CLICK OUT OF THE INPUT 
     //THEN I REMOVE IT 
     $("#input").remove(); 
     $(document).off("click.removeinput"); 
    } 
}) 

(但我個人從來沒有使用過的事件的命名空間,所以看看怎麼回事)


或者,你可以使用一個命名函數,重新連接one()如:

..."dblclick".., function() { ... 
    $(document).one("click", removeinput); 


function removeinput(e) { 
    if ($(e.target).prop("id")!="input") 
    { 
     //IF I CLICK OUT OF THE INPUT 
     //THEN I REMOVE IT 
     $("#input").remove(); 
    } 
    else 
     $(document).one("click", removeinput); 
}; 
+0

感謝您的回答。 我終於以你所建議的「另類」方式(最後一個)做到了。雖然我已經調用了這樣的函數: removeinpit(); 而不是: $(document).one(「click」,removeinput); //這不起作用。 我很感謝你的時間。謝謝。 –