2

簡単な説明:parentElementの情報を取得する必要がありますが、入力情報を更新する必要があります。parentElementのinnerHTMLを取得しているときに、チェックボックスをオフにしても、チェックされた状態で表示されます。htmlは、javascriptで行った変更を反映していません。

ここに私のコードの小さな断片があります:http: //jsfiddle.net/7993K/8/

<div id="parentElement">
<label id="thisLabel">
    <input type="checkbox" id="idnumber" checked="checked"> Bring Mail Inside
</label>
</div>
<p>
<a onClick="checkit()">Check it out</a>
</p>
<p onclick="checkToggle()">change to false</p>


function checkit() {
alert(document.getElementById("parentElement").innerHTML);
}
function checkToggle() {
element = document.getElementById("thisLabel");
element.childNodes[0].checked = false;
alert("the checkbox is checked: " + element.childNodes[0].checked);
}

私がこのようにしようとしている理由の少し長いバージョン: これは、サイトの検査官がチェックアウトした大きなフォームです。それはオンラインソフトウェアアプリに持ち込まれ、クライアントとのコミュニケーションを担当する女性がこの情報を確認し、電話で検査官と話します。このフォームは、htmlとしてデータベースに保存されます。女性がフォームの確認を終えた後、チェックされていないボックスが1つか2つある可能性があります。これは、クライアントにメールを送信する前にチェックしたいものです(問題があり、修正する必要がありましたが、修正されました。彼女はすべてがチェックされたという適切なレポートを送ることができます)

彼女はチェックボックスをオフにしますが、HTMLを更新せず、値を変更するだけです。値は表示されますが、parentElementのinnerHTMLを取得しても表示されません。あなたは私のJSFIDDLEhttp://jsfiddle.net/7993K/8/で見るでしょ

ロード時にチェックアウトをクリックします:チェック済み=チェック済み

チェックボックスをオフにする:チェック済み=チェック済み

falseに変更:alertは、チェックされたプロパティがfalseであることを確認しますが、チェックアウトすると、innerHTMLがチェックされたものとして表示されます。

適切な情報をロードしてこのinnerHTMLにアクセスする必要があります(チェックマークが付いている場合、htmlはそれを反映している必要があります)

事前編集:ラベルのクリック時にイベントを作成することでこれを実行できると思います。そのイベントは( "parentElement")。innerHTMLを受け取り、それをいくつかの異なる場所に分割して、正しいチェック値と一緒に戻します。最初に入力がチェックされていない場合は、わずかに異なります。それが私がこれを行うことを考えることができる唯一の方法であり、それは正しい方法のようには思えません。

4

2 に答える 2

4

チェックボックスの状態と入力ボックスの値は、ソースHTMLの一部ではありません。

これを証明するために、を使用してページにテキストボックスを配置しvalue="old"、値を変更してから比較element.getAttribute("value")element.valueてみてください。これらは同じではありません。

フォームの背後にあるHTMLではなく、フォームの状態を実際に保存する必要があります。

于 2013-02-06T18:34:58.507 に答える
3

これは、 HTML属性とは別のエンティティであるDOMプロパティelement.childNodes[0].checked = false;を設定しているために発生しています。

関数は、をチェックするのではなく、 DOMプロパティcheckitを問い合わせる必要もあります。innerHTML

DOMプロパティとHTML属性の詳細については、この質問を参照してください。

于 2013-02-06T18:37:41.500 に答える