誰かが私を助けてくれることを望んでいるjQueryから気が遠くなるような応答を受け取っています。単純な問題があります...HTMLフォームの非表示フィールドの「値」を設定しています(<input type='hidden'>
フォームが読み込まれるとき。3つの非表示フィールドを持つフォームがあり、2つは正常に機能しています。3番目...ここに問題があります:
フォームの読み込みが完了すると(はい、読み込まれて表示されます...前の2つの非表示フィールドが読み込まれ、jQueryによって正常に設定された間接的な証拠として)、次のコードを実行します(この最後のフィールドとして関連するスニペットを表示するだけです) 「今日」に設定された日付です):
case "today":
SetFieldValue (targetElement , Date.today().toString("yyyy-MM-dd HH:mm:ss") );
console.log ('Setting ' + jQuery(targetElement).attr('id') + ' to "today": ' + Date.today().toString("yyyy-MM-dd HH:mm:ss") );
break;
SetFieldValueは、タイプに関係なくDOM要素を設定できるようにするために作成した小さな関数です。コードは次のとおりです。
function SetFieldValue ( domObject, value ) {
// as a safety function, check if a string representation of the domObject was passed in and convert it to a jQuery object if it was
if ( jQuery.type(domObject) === "string") {
domObject = jQuery(domObject);
}
if ( jQuery.inArray (domObject.prop('tagName').toLowerCase(),['input' , 'select' , 'textarea']) >= 0 ) {
console.log ("setting to value attribute: " + value);
domObject.attr('value',value);
console.log ("now set to: " + domObject.attr('value') + "(" + domObject.attr('id') + ")" );
} else {
console.log ("setting to html attribute");
domObject.html( value );
}
return domObject;
}
これは問題の狂気を理解する上で重要であるため、console.logメッセージに注意してください。これを実行すると、コンソールに表示される内容は次のとおりです。
ここで、「today」caseステートメントの最後の行(別名「break;」行)にブレークポイントを設定します。コンソールメッセージに基づいて、すべてが順調です。DOM要素#activity-start_timeが設定されているようです。さて、ここでそれは奇妙になります。
私が最初に行うことは「targetElement」への参照をテストすることであり、デバッガーコンソールが最初に提供するのは空の配列です。
何?それはかなり奇妙です。数秒が経過すると、突然、期待どおりに解決されることを考えています(コンソールに再入力しないで、空のセットから下に表示されているものに変更するだけです)。
targetElementが期待どおりになっているので、jQueryを使用して、#activity-start_timeのDOM要素が同じ値を報告していることを簡単に確認します。上記の結果を見ることができます。値を取得していないことを除けば、targetElementとまったく同じです。何?!?
私は完全に途方に暮れています。どんな助けでも大歓迎です。
ケン
ps他の人が.attrの代わりに.propを使用することを提案していることに注意します。どちらもまったく同じように動作するようです。