2014-10-30 63 views
0

至於1.7現場活動已棄用 - 我目前使用的是1.11.1 jquery版本。 現在,也在文檔上說,對於1.9 jquery來說,live已經被移除 - 對我來說很好。 在接下來的情況下jquery 1.11.1 - live vs

<script type="text/javascript"> 

    $(document).ready() 
{ 
    $("#submitFile").live('click', function (e) { 
     alert('button clicked'); 
     e.preventDefault(); 
     alert(1); 
    }); 

    $('#fileCtrl').live('change', function (event) { 
     alert(1); 
    }); 

    <!-- this was a typo from--> 
    $('#fileCtrl').live('on', function (event) { 
     alert(1); 
    }); 

} 
</script> 



<div id="uploadDiv"> 
    <input name="import" value="import" type="file" id="fileCtrl" /> 
    <input type="submit" value="export" id="fileupload" /> 
</div> 

我目前的項目中,我不得不重新使用現場。 「開」事件簡單不會觸發。 爲什麼? 我試着用live和它的工作方式,它在doc上說它在版本1.9上被刪除了。 對此有何建議?爲什麼活着還在工作,爲什麼「開」不行?

在此先感謝。

+0

沒有'on'事件。 'on'是jQuery對象的一種方法。 – 2014-10-30 11:29:04

+0

你能否提供你正在編寫的真實代碼,因爲這個例子看起來有誤導性,並且沒有顯示出你正在試圖解決的實際問題?在所示的簡單情況下,你可能不會使用'on' *或*'live'。 – 2014-10-30 11:32:32

+0

@Vohuman:這裏沒有動態加載,所以那些「重複」是不合適的。 – 2014-10-30 11:40:07

回答

4

您需要重新調整您的調用堆棧。這意味着,你需要的目標就是能抓住你想要的所有click事件和具有綁定說像

$('the_parent_node_probably_document_body').on('click', '#submitFile', function(e) { 
}); 

父節點,它並沒有真正多大意義,從ID委託任何事件 - 選擇器,因爲它只會在你的標記中出現一次,你實際上想要委託來自多個節點的事件。所以我現在很困惑。

+0

由於元素不是動態的,使用'live'或'on'似乎不需要開始(並且當然不需要委託事件處理程序)。你不是唯一一個在這裏困惑的人:) – 2014-10-30 11:31:16

0

元素沒有「開」事件。

$('#fileCtrl').live('change', function (event) { 
    alert(1); 
}); 

$('#fileCtrl').live('on', function (event) { 
    alert(1); 
}); 

您的代碼意味着在'更改'或'開啓'事件發生時具有相同的反應。可能是你用'開'搞亂了'改變'事件?

+0

我想念那個。 – 2014-10-30 12:03:04

0

on是一個函數,而不是DOM事件。該事件仍然被稱爲「改變」:

$('#fileCtrl').on('change', function (event) { 
    alert(1); 
}); 
+0

它的工作就是這樣。事實上,這是我第一次嘗試 - 然後我通過使用「活」 - 這是有效的。 – 2014-10-30 11:55:41

0

由於簡單的示例所示,你就懶得使用liveon(你的第三個例子似乎是一個錯誤,因爲沒有on事件on是。一個jQuery方法)。您的DOM準備處理程序中還缺少function和右括號。

例如使用純click,改變methods

$(document).ready(function() 
{ 
    $("#submitFile").click(function (e) { 
     alert('button clicked'); 
     e.preventDefault(); 
     alert(1); 
    }); 

    $('#fileCtrl').change(function (event) { 
     alert(1); 
    }); 
}); 

注意最後一個例子是此版本無效的,所以我已經排除它。

如果你真的想使用on,新的語法爲:

$(document).ready(function() 
{ 
    $("#submitFile").on('click', function (e) { 
     alert('button clicked'); 
     e.preventDefault(); 
     alert(1); 
    }); 

    $('#fileCtrl').on('change', function (event) { 
     alert(1); 
    }); 
}); 

最後,如果元素被添加到頁面動態,使用委託的事件處理程序,連接到一個非改變祖先(文檔是默認的):

$(document).ready(function() 
{ 
    $(document).on('click', "#submitFile", function (e) { 
     alert('button clicked'); 
     e.preventDefault(); 
     alert(1); 
    }); 

    $(document).on('change', '#fileCtrl', function (event) { 
     alert(1); 
    }); 
}); 

回覆:DOM就緒處理程序。有一個DOM準備好的簡單的快捷方式:

$(function(){ YOUR CODE HERE }); 
0

我發現我的錯誤!

它是在文件準備好聲明 - 我多麼愚蠢!

$(document).ready() 
{ 

的 $(文件)。就緒(函數()

感謝大家insetead :)

+2

下次閱讀評論並保存一個小時。 – 2014-10-30 15:06:37

+0

是的,你會發現我在下面的答案中提到。請花時間閱讀所有答案,以便人們繼續爲他們提供:) – 2014-10-31 09:30:03