これらのソリューション間にdifferenceはありますか?
解決策1:
function doSomething(id, value) {
console.log(value);
//...
}
<input id="theId" value="test" onclick="doSomething(this.id, this.value)" />
...および解決策2:
function doSomething(id) {
var value = document.getElementById(id).value;
console.log(value);
//...
}
<input id="theId" value="test" onclick="doSomething(this.id)" />
はい、最も顕著なのは!私は2番目のものが機能するとは思わない(そしてそれが機能する場合、あまり移植性がない)。最初のものは問題ないはずです。
// HTML:
<input id="theId" value="test" onclick="doSomething(this)" />
// JavaScript:
function(elem){
var value = elem.value;
var id = elem.id;
...
}
これも機能するはずです。
更新:質問が編集されました。どちらのソリューションも同等になりました。
2番目の関数には次のものが必要です。
var value = document.getElementById(id).value;
それからそれらは基本的に同じ機能です。
2番目のバージョンでは、this.id
から返された文字列を渡します。要素そのものではありません。
したがって、id.value
は、あなたが望むものを提供しません。
this
で要素を渡す必要があります。
doSomething(this)
その後:
function(el){
var value = el.value;
...
}
注:一部のブラウザーでは、次のようにすると2番目のブラウザーが機能します。
window[id].value
要素IDはグローバルプロパティですが、これは安全ではありませんであるためです。
IDで再度取得するのではなく、this
で要素を渡すだけで最も意味があります。
オブジェクトを渡します。
doSomething(this)
オブジェクトからすべてのデータを取得できます。
function(obj){
var value = obj.value;
var id = obj.id;
}
または、id
のみを渡します。
doSomething(this.id)
オブジェクトを取得し、その値の後:
function(id){
var value = document.getElementById(id).value;
}
効果を調べても違いはありません。値は同じです。しかし、もっと何かがあります...
解決策3:
function doSomething() {
console.log( theId.value );
}
<input id="theId" value="test" onclick="doSomething()" />
dOM要素にidがある場合、jsで直接使用できます