2015-04-22 58 views
1

我是jquery的新手,我無法理解如何在'click'事件中使用'blur'事件。jquery,點擊事件內部的模糊事件

我的項目有

  • 工具箱:其中有一個按鈕添加元素,以帆布
  • 畫布:添加的所有元素出現在這裏
  • 一個編輯器窗口:我在哪裏可以看到/編輯元素的屬性

這裏是我的項目的草圖:Fiddle

我添加到畫布的每個元素都有兩個表示法:一個對象和一個可見的div。關鍵是:當我向畫布添加元素時,我可以點擊它們,並且我可以在編輯器窗口中編輯它們的屬性。元素有一個文本屬性和它的名字。

但是,如果我有例如:畫布上的2個元素,並嘗試更改其中一個文本屬性(在編輯器窗口中),它會更改所有元素的text屬性。我的問題功能如下:

$(function(){ 
canvas.delegate('.myElement','click', function(){ 
    var obj = this; 
    myTextArea.val(this.text); 
    myTextArea.on('blur',function(){ 
     obj.text = myTextArea.val(); 
    }); 
}); 

});

有人能告訴我我在哪裏嗎?感謝您的幫助球員

+0

當您在畫布上添加元素時,請嘗試添加一個eventlistener。 – Sushil

+0

你應該(幾乎)從來沒有在其他事件處理程序中使用事件處理程序,它們只是繼續複合。每次有人點擊該元素時,都會添加一個新的「blur」事件處理程序,以便在每個模糊事件上運行代碼兩次,然後執行三次,然後四次。 – adeneo

回答

1

每次單擊某個元素時都會綁定blur事件。

你可以聲明一個變量來跟蹤被點擊的元素:

var currentElement = null; 

,然後綁定模糊處理:

myTextArea.on('blur',function(){ 
    if (currentElement) { 
     $(currentElement).text(myTextArea.val()); 
    } 
}); 

canvas.delegate('.myElement','click', function(){ 
    currentElement = this; 
}); 
+0

John S,非常感謝你!它的工作,你搖滾! – Rafael

1

模糊功能被激發每當元素失去焦點,只是聲明事件點擊功能之外:

myTextArea.on('blur',function(){ 
      obj.text = myTextArea.val(); 
    }) 

確保OBJ定義in.function範圍。

2

問題從以前附加模糊處理程序,出現這保持連接狀態,需要在連接新連接器之前拆卸。要分離,請使用.off()

$(function() { 
    canvas.on('click', '.myElement', function() { 
     var obj = this; 
     myTextArea.val(this.text).off('blur').on('blur', function() { 
      obj.text = myTextArea.val(); 
     }); 
    }); 
}); 

這應該解決這個問題,但你可能要考慮一個更有效的方法,在其中一個模糊處理撐永久連接到textarea的。

$(function() { 
    myTextArea.on('blur', function() { 
     var element = $(this).data('element'); 
     if(element) { 
      element.text = this.val(); 
     } 
    }); 

    canvas.on('click', '.myElement', function() { 
     myTextArea.val(this.text).data('element', this); 
    }); 
}); 

這裏,myTextArea.data('element')用於參考存儲到最近.myElement點擊。

+0

它也有效。感謝Roamer! :d – Rafael