2

操作する必要があるフォーム フィールドである「targetElement」という jQuery オブジェクトを渡す関数があります。この関数を使用して、ロード後にフォームのデフォルト値を設定します。1 つのフォームには、3 つの非表示のフォーム要素 (aka、<input type="hidden">) があり、それぞれに値が割り当てられ、3 つのうち 2 つが正常に機能します。3つ目は私を夢中にさせています。

関数内のコード スニペットを次に示します。

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 関数の場所:

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;
}

つまりね。SetFieldValue の呼び出しの直後にデバッグ ブレークポイントを設定しました。値が設定されていることを明確に示す「targetElement」と入力しました。それでも、DOM フィールドへの jQuery 参照を入力すると、値が設定されていない状態で表示されます。は?

ここに画像の説明を入力

ここで、言及しなかったことが 1 つあります...これは重要だと思います...デバッガーに「targetObject」と入力すると、最初に空の配列が返されました。

ここに画像の説明を入力

それから 1、2 秒後に、最初に見たスクリーン ショットに自動的に拡大されました。助けてください!

アップデート

これまでのすべての助けに本当に感謝していますが、本当の問題は、targetElement (jQuery オブジェクト) への応答の「遅延」によって暗示されているのではないかと思います。詳細については、上記を参照してください。また、別の興味深いスナップショットを以下に追加しました。コード内の log.console ステートメントに気付いた場合、これは理にかなっています。

ここに画像の説明を入力

私がやろうとしたことは次のとおりです。

a) 値を何に設定するかを述べる b) 示された意図に値を設定する (aka, 2012-12-02 00:00:00) c) 設定されていることを確認する (設定されている) d) 次に呼び出しルーティングから再度確認します(これも設定されていることを確認します)

最後の log.console (「break」ステートメント) の直後の行にブレークポイントを設定すると、デバッガーはすべてのコンソール メッセージに同意しません。奇妙な!

更新 2

人々は追加のコンテキスト、正確には「コード」を求めてきました。問題を再現するコードのコンパクトなモジュールを提供する良い方法を見つけるのに苦労しているので、問題を示す短いスクリーンキャストが役立つと思いました. そのための 2 つの試みを次に示します。

スクリーンキャスト 1 スクリーンキャスト 2

4

3 に答える 3

1

jQuery を使用して value 属性を設定するのではなく、要素の value プロパティを直接参照します。

domObject[0].value = value;

または、jQuery オブジェクトでラップすることさえしないでください。

domObject.value = value;
于 2012-12-02T23:23:53.387 に答える
1

.val(value)の代わりに使用してみてください.attr('value',value)

于 2012-12-02T23:24:00.790 に答える
0

私は人々がこの問題を実際に掘り下げるのに十分なコンテキストを提供しなかったことを知っていますが、最終的にはそれを解決しました。何が問題でしたか?本当にばかげていました…いつもじゃないですか?とにかく、それは質問「id」のDOM要素が一意ではない場合にすぎませんでした。Grrr。あなたが困っているのは、あなたが見落としていることは常に明白なことです。

とにかく、あなたの忍耐と助けに感謝します。

于 2012-12-04T16:39:19.920 に答える