1

私はこのコードスニペットを持っています:

$('#selector1,#selector2').change(function(){
    checkDate(document.getElementById($(this).attr("id")));
});

$上記は正常に機能しますが、代わりにjQueryを使用したいdocument.getElementById. だから、私はこれを試しましたが、JavaScriptエラーが発生します:TypeError: valueToTest is undefined

$('#selector1,#selector2').change(function(){
    checkDate($("#" + $(this).attr("id")));
});
4

4 に答える 4

4

jQuery オブジェクトを DOM 要素の代わりにパラメーターとして渡し、checkDate()これを行うことができる DOM 要素を取得します。

$('#selector1,#selector2').change(function(){
    checkDate(this);
});
于 2013-01-14T12:57:55.580 に答える
4

呼び出すdocument.getElementById('id')と、DOM ノード自体への参照を取得しますが、呼び出す$('#id')と、セレクターに一致した DOM ノードへの参照を持つ jQuery オブジェクトが返されます (指定された ID を持つ要素がある場合)。前者ではプロパティに直接アクセスできますが ( this.id、など)、2 番目では jQuery 関数 ( 、など)this.valueを使用する必要があります。.prop().val()

jQuery オブジェクトを渡したい場合はcheckDate、プロパティに直接アクセスしていて、それらのプロパティが jQuery オブジェクトに存在しなくなった場合にエラーが発生しないように、関数を変更する必要があります。

そうは言っても、この行:

checkDate(document.getElementById($(this).attr("id")));

必要以上に複雑です。すでに要素への参照を取得しているため、その要素thisにアクセスしidて に渡し、document.getElementById()別の参照を取得することは意味がありません。あなたは単に行うことができます:

checkDate(this);
于 2013-01-14T13:01:41.450 に答える
1

コード スニペット:

document.getElementById($(this).attr("id"))

上記のコードは HTML を返しますDOM Object。を使用$(this);すると、 は得られませんDOM Objectが、jQuery object. $(this)[0]したがって、のように、または単にthis取得するために変更する必要がDOM Objectあり、コードは完全に正常に機能します。

コード:

$('#selector1,#selector2').change(function(){
    checkDate($(this)[0]);
});

また

$('#selector1,#selector2').change(function(){
    checkDate(this);
});
于 2013-01-14T13:48:46.267 に答える
0

document.getElementById は (1 つの) DOM ノードを取得しますが、jQuery は実際には DOM ノードの配列である jQuery オブジェクトを返します。したがって、交換するには

var element = document.getElementById($(this).attr("id"));

jqueryを使用して、これを行います

var element = $($(this).attr("id"))[0];
// or
var element = $($(this).attr("id")).get(0);
于 2013-06-26T17:20:01.823 に答える