ホームページ >ウェブフロントエンド >jsチュートリアル >jqueryチェックボックスでチェックされたバグ問題の解決策とanalyze_jquery
プロジェクトに取り組んでいたときに、jQuery のチェックボックスのバグに遭遇しました。マスターに相談した後、何が起こっているのかを把握し、ここに記録して皆のために分析しました。
まずコードを入力してください:
解決策: attr() を prop() に置き換えます
追記: prop() と attr() の違い:
最近 iteye のニュースで jQuery が 1.6.1 にアップデートされたことを知りました。以前のバージョンからの最大の変更点は、.prop メソッドの追加です。ただし、.prop() メソッドと .attr() メソッドを文字通り区別することは困難です。中国語では、プロパティとアトリビュートはどちらも「属性」を意味します。
以下は、このブログ投稿 (javascript:mctmp(0);) に基づいた .prop() と .attr() の使用法の簡単な翻訳です。
1. 1.5.2 から 1.6.1 にアップグレードします
新しいメソッド .prop() と .attr() メソッドの変更の導入により、jQuery 1.6.1 は属性とプロパティの違いと関係についての激しい議論を引き起こしました。同時に、1.6.1 ではいくつかの下位互換性の問題も解決されています。 1.5.2 から 1.6.1 にアップグレードする場合、属性コードを変更する必要はありません。
以下は、jQuery 1.6 および 1.6.1 の Attributes モジュールの変更点と、.attr() メソッドと .prop() メソッドの推奨される使用方法について説明します。ただし、前述したように、jQuery 1.6.1 では、以前のすべてのケースで使用されていた .attr() メソッドを使用できます。
2. 起こった変化
Attributes モジュールの変更により、属性とプロパティの間のあいまいさが解消されましたが、1.6 より前のすべてのバージョンでは属性とプロパティが単一のメソッド (.attr()) で処理されていたため、jQuery コミュニティに多少の混乱が生じました。しかし、古い .attr() メソッドにはいくつかのバグがあり、保守が困難です。 jQuery1.6.1 は属性モジュールを更新し、いくつかのバグを修正しました。
特に注意していただきたいのは、checked、selected、readonly、disabled などのブール属性は、1.6.1 でも 1.6 以前と同じように扱われることです。これは次のコードを意味します:
コードをコピーします
まず、ウィンドウやドキュメントで .attr() メソッドを使用することは、jQuery 1.6 では正しく機能しません。これは、ウィンドウやドキュメントに属性を含めることができないためです。これらにはプロパティ (location やreadyState など) が含まれており、.prop() メソッドを使用するか、単純にネイティブ JavaScript メソッドを使用して操作する必要があります。 jQuery 1.6.1 では、ウィンドウとドキュメントで .attr() を使用すると、エラーがスローされるのではなく、.prop を使用するように自動的に変換されます。
第 2 に、checked、selected、および前述のその他のブール属性は、これらの属性と対応するプロパティの間に特別な関係があるため、特別に扱われます。基本的に、属性は次の HTML に表示されるものです:
<入力タイプ=”チェックボックス”チェック済み=”チェック済み”>
check などのブール属性は、デフォルト値または初期値にのみ設定されます。チェックボックス要素では、チェックボックス要素が選択されているかどうかに関係なく、ページの読み込み時にチェックされた属性が設定されます。プロパティは、ブラウザが現在の値を記録するために使用するものです。通常、プロパティは対応する属性 (存在する場合) を反映します。しかし、これはブール属性の場合には当てはまりません。ブール値プロパティは、ユーザーがチェックボックス要素をクリックするか、select 要素のオプションを選択すると、最新の状態に保たれます。ただし、対応するブール属性は異なります。前述したように、これらはブラウザによって初期値を保存するためにのみ使用されます。
コードをコピー