2013-04-22 24 views
11

İlginç bir sorunum var ve sanırım bunun kökü var, ama emin olmak istedim. Remove() adında bir işlevi çağıran bir bağlantım var. Chrome dışındaki tüm tarayıcıların işlevle ilgili sorunları yoktu. Ancak, aşağıdaki örnekte olduğu gibi işlevi basitleştirdiğimde bile tıklanan bağlantı Chrome'da kayboldu. Bu soruyu gördüm: Can't use "download" as a function name in javascript. Ancak bağlantılarda, ayrılmış bir anahtar kelime olarak "kaldır" hakkında hiçbir şey görmedim. Sorum şu: Bu bir anahtar kelime olmak konusunda doğru muyum? Öyleyse, Google anahtar kelimelerinin bir listesini bulabileceğim herhangi bir yer var mı? Arama yaptım ve başka bir yerde bir sorun olduğunu bulamadım.Google Chrome'da ayrılmış bir anahtar kelimeyi "kaldır" mı?

<a href="javascript:void(0)" onclick="remove()">Remove</a> 

JavaScript:

function remove(){ 
alert("Hi"); 
} 
+0

ben konsoldan kullanmak mümkün değilim –

+1

evet, ayrıca 'status' –

+1

gibi kelimeler de haklı olduğunuzu düşünüyorum: https://productforums.google.com/forum/?fromgroups=#!topic/chrome/y9huP7JttMY – Adrift

cevap

8

Chrome'daki öğeler, üst öğeden yapmak zorunda kalmadan bir öğenin kendiliğinden kaldırılmasına izin veren bir .remove() yöntemine sahiptir.

Sorun, özellik işleyicileri kullanırken farklı bir kapsam zincirine sahip olmanızdır. Bu kapsam zinciri, öğenin kendisini ve document'u içerir. Bu, öğenin tüm özelliklerinin ve document değişkenleri olarak göründüğü anlamına gelir. element üzerine

Eğer fonksiyon remove() adında ve küresel bir işlev/değişkeni olduğu için, bu (şimdi değişken) .remove özelliği gölgesinde ediliyor Çünkü

. Bu bir uyarı ile görülebilir. Size işleyicisi değiştirirseniz: Yani o ayrıldığından bu değil

function remove() { [native code] } 

ama gölgeleme biter bir özelliği olarak kullanılır ziyade o:

onclick="alert(remove)" 

... gibi bir şey alırsınız küresel.


düzeltmek ya küresel doğrudan kullanmak için:

onclick="window.remove()" 

Veya işlev adını değiştirin.

+0

Harika bir açıklama, teşekkürler. Sadece işlev adını değiştireceğim. – illinoistim

+0

Rica ederim. –

+0

Sadece dikkat etmek istedim '.remove()' sadece bir özellik değil krom elementler var - bu yeni özelliğin bir parçası :) –

1

Kötü uygulama olarak kabul edilir jsfiddle

Inline javascript bu şekilde

<a href="#" id="remove">Remove</a> 

function remove() { 
    alert("Hi"); 
} 

document.getElementById("remove").addEventListener("click", remove, false); 

iyi değil, bunu kullanarak krom hiçbir sorunu yoktu. Aynı işlevi kullanarak daha fazla öğeler varsa

, sadece bu

document.getElementById("remove1").addEventListener("click", remove, false); 
document.getElementById("remove2").addEventListener("click", remove, false); 
document.getElementById("remove3").addEventListener("click", remove, false); 
document.getElementById("remove4").addEventListener("click", remove, false); 

gibi Daha fazla satır eklemek veya bu

var nodelist = document.querySelectorAll("[id^=remove]"); 

Array.prototype.forEach.call(nodelist, function (element) { 
    element.addEventListener("click", remove, false); 
} 

Bir göz atabilirsiniz üzerinden bir nodelist ve döngü alabilir olay bağlama yöntemleri arasındaki farklar hakkında daha fazla bilgi edinmek için başka bir answer here on SO de, konu hakkında daha fazla bilgi veren küçük bir G arama yapmak. Ve tabi ki, bu şekilde yaşayarak yaşadığınız sorunu önleyecektiniz.

+0

addEventListener'ı kullanmanın neden daha iyi olduğunu açıklayabilir misiniz? Kaldırma işlevine birden fazla başvuru varsa ne yapmalıyım? – illinoistim

+0

Umarım bu, başka bir soruya cevap vermek için yeterli bilgi olur, ancak şimdiden memnun olduğunuza dair bir cevap seçtiniz. – Xotic750

+0

Sana bir +1 verdim. – illinoistim

1

Üzerinde herhangi bir belge bulamıyorum, ancak Chrome'daki DOM öğelerinin, onları açıkça kaldıran yerel bir yöntemi remove vardır. onclick, this, aslında öğenin kendisini ifade eder, böylece öğeyi kaldıran this.remove() çağrısını sonlandırır. Bunun üstesinden gelmek için, bunun yerine window.remove()'u arayabilirsiniz.

http://jsfiddle.net/3YkZH/1/

basitçe remove çağrılırken Ayrıca bu sorunu yok addEventListener aracılığıyla bağlanması standart olayını kullanmak daha iyi olacaktır:

http://jsfiddle.net/3YkZH/2/

+0

DOM spesifikasyonunun bir parçası :) http://dom.spec.whatwg.org/# dom-childnode-oldukça yeni kaldır. –

İlgili konular