2013-10-23 61 views
2

我想指定點擊事件到我的網頁中的特定文本字段,它的id值是service如何將代理事件分配給特定的Dom元素

即使如果我使用setElement()來傳遞另一個元素來查看,我仍然想在文本字段(id:service)上應用該點擊事件。

視圖代碼:

var addService=Backbone.View.extend({ 
    events:{ 
     "click #service":"alertfunction" 
    }, 
    alertfunction:function(event){ 
     alert("working"); 
    } 
}); 
var addFunctionObj=new addService({el:$("div")}); 

的html代碼:

<div align="center" id="div2"> 
    <input type="text" id="service" style="width: 200px; height: 20px; color: white; background: green" placeHolder="Enter Service"/> 
    <input type="text" id="price" style="width: 200px; height: 20px; color: white; background: green" placeHolder="Enter Price"/> 
    <input type="button" id="add" align="center" style="width: 100px; height: 50px; color: white; background: green" value="AddService"/> 
    <span>I am Normal Text</span> 
</div> 

測試用例:

最初如果我點擊文本字段(服務),得到警報即使你通過div到視圖。 但是,如果我傳遞以下名稱以使用setElement查看,則單擊事件在文本字段(服務)上不起作用。

view.setElement('#add') 
view.setElement('input') 
view.setElement('span') 

再次如果傳遞div or #div2查看,點擊事件上的文本字段工作正常(服務)。但如果你通過上面的元素來查看,它不工作。爲什麼?

我想要什麼:如果你傳遞任何元素來查看,單擊事件應該在文本字段(服務)上工作。可能嗎。

謝謝。

回答

2

你想要做的不是骨幹的工作方式。

以下代碼所做的是偵聽「this.el」的子項的點擊事件。

events:{ 
    "click #service": "alertfunction" 
} 

這意味着您不能將「this.el」設置爲輸入#添加,因爲此元素沒有ID爲#service的子項。

作品

<div id="div1"> 
    <input type="text" id="service" /> 
</div> 

var addFunctionObj=new addService({el:$("div1")}); 

不工作

<div id="div1"> 
</div> 
<input type="text" id="service" /> 

var addFunctionObj=new addService({el:$("div1")}); 

第二個例子不工作,因爲#服務是 this.el.的孩子只要你「傳遞」一個沒有#service作爲子元素的元素,它就永遠不會工作。

相關問題