2012-10-19 64 views
2

問題是在.html()jQuery函數之後,該按鈕的事件被停止。 下面是一個例子 -在html函數之後停止工作事件

$(document).ready(function() { 

    Create(); 

    $('body div input').click(function() { 
     alert('Hello'); 
     Create(); 
    }); 

    function Create() { 
     $('body').html('<div><input type="button" value="button" /></div>'); 
    } 

}); 

在這裏,我第一次單擊該按鈕事件是作品,但創建()函數被再次調用後,該事件將不再工作。

順便說一句 - html代碼中的body標籤是空白的,它沒有任何CSS,所以它是一個jQuery問題。

的jsfiddle - http://jsfiddle.net/HVzcy/

回答

2

可以使用該功能(),而不是點擊解決它。 http://api.jquery.com/on/

$('body').on('click', 'div input', function() { 
    alert('Hello'); 
    Create(); 
}); 
+3

的'.live()'方法已被棄用現在已經有一段時間了。新代碼應該使用'.on()',它提供了與更高效的接口相同的功能。 – Pointy

+1

你是對的,我不知道現場功能已被棄用,謝謝編輯:D – mdaguerre

1

這不是與jQuery的一個問題,它與你建立的事件處理程序的方式有問題。當您更新容器的內容(在這種情況下爲<body>)時,所有先前的內容以及綁定到它們的事件都將被拋出。

您可以使用事件代表團在<body>元素本身,以防止處理器被丟失:

$('body').on('click', 'div input', function() { 
    alert("hello"); 
}); 

,它依賴於一個事實,即瀏覽器(有時與jQuery的幫助下)傳播的事件了DOM樹。因此,通過使用該選擇器將處理程序置於<body>以過濾事件,您可以隨時處理任何添加到身體的任何<input>元素上的「單擊」事件。

+0

謝謝,我曾嘗試過現場和方法,他們都工作,但正如你所說的現場已被棄用,所以我然後在方法上使用。非常感謝:) – israel

1

更新回答

jQuery的delegate可以幫助您在這個

$(document).ready(function() { 

    Create(); 

    $("body").delegate("div input", "click", function(){ 
     alert('Hello'); 
     Create(); 
    }); 

    function Create() { 
     $('body').html('<div><input type="button" value="button" /></div>'); 
    }​ 

}); 

你可以看到它在這裏

http://jsfiddle.net/NjuJ2/1/

+3

請參閱我對@ mdaguerre的回答的評論 - '.live()'方法現在已被棄用了幾年。 – Pointy

+0

@積分我已經更新了我的答案現在看看 – rahul