2011-02-03 13 views
1

ASP.NETサイトに統合するように言われたJavaScriptを継承しました。私はこれが簡単だと思いましたが、それは少し難題になりつつあります。JavaScriptでJavaScriptの隠しフィールドを更新する

コードは次のようなものになります。

<SELECT id="Question1" name="Question" onchange="updateQuestion();">     
<OPTION value="notChosen">--Please Select One--</OPTION> 
<OPTION value="in">India</OPTION> 
<OPTION value="de">Germany</OPTION>      
<OPTION value="fr">France</OPTION>     
<OPTION value="us">United States</OPTION>      
<OPTION value="ch">Switzerland</OPTION>     
</SELECT> 

を目標は、ASP.NETには、このHTMLコントロールから値を取得することであるが、このコントロール自体は動的にjavascriptの他のチャンクによって生成されているので、Iこれをasp.netコントロールに変更することはできません。私の解決策は、onchange = "updateQuestion();"を追加することでした。この方法は、これはこれらのSELECTタグを取り、ASP.NETコントロールに値を配置しますJS:

function updateSecQ() { 
    var sQuestion = document.getElementById('<%=sQuestion.ClientID%>'); 
    sQuestion.Value = ""; 
    var questions = document.getElementsByName('Question'); 
    for (question in questions) { 
     if (questions[question].value != null) 
      sQuestion.Value += questions[question].value + ","; 
    } 
    alert(sQuestion.Value); 
} 

あなたが見ることができるように、それはASP.NETコントロールを更新するために探しています: <asp:HiddenField ID="sQuestion" runat="server" value="" />

これが表示されますすべての仕事に、しかし、私はフォームにサーバー側に移動すると、私はsQuestion.Valueはまだ= ""であることがわかります。

私がここで間違っていたことははっきりしていません。入力は非常に高く評価されます。あなたの時間をありがとう。

+0

ページライフサイクルのどの部分でsQuestion.Valueを読み込もうとしていますか? –

答えて

7

ダーノについてはASP.netですが、ブラウザのDOMでは、非表示フィールドの値は値ではなくすべて小文字で、値ではありません。これは、ブラウザが送信するvalue属性で、sQuestion.Valueを設定すると、送信された値を設定できませんでした。

+0

+1良いスポット! @Dio Javascriptは、オブジェクトがまだ定義されていない場合は、ただちにそのオブジェクトの新しいメンバーを作成します。便利だが危険だ! http://www.w3schools.com/js/js_objects.asp –

+0

良いキャッチ。私は明らかに警告が空の文字列であるので、私は明らかにいくつかのエラーを持っていますが、私はそれを理解します。ほんとうにありがとう。 – Dio

+0

...あなたはまだsQuestion.Valueに警告していますか? - または、getElementsByNameが何も返さない。いいえ、私はそれを見て、その選択!それでは質問[質問] [質問] .selectedIndex] .value - あなたはいくつかの一時変数を使ってそれを合理化することができます... –

2

JavaScriptの機能は同じaspxページにありますか? 私はそれを信じていない場合

var sQuestion = document.getElementById('<%=sQuestion.ClientID%>'); 

は失敗します。

あなたはjQueryのを使用している場合は、使用することができます。

$("[id *= 'substringOfTheASPId']").val("new value") 
+0

良い提案。おそらくスクリプトはaspxのページにありますが、OPには機能が働いていると言われています。 –

0

あなたはsQuestion.Value代わりのsQuestion.valueを設定します。

私はこれを同様の質問でan answerに見つけました。

0

.NETでは、HiddenFieldの値がクライアント側で操作されることを期待していないと考えています。たぶん、毎回ViewState値を読み込むだけです。あなたはこのように「ラナ」プロパティを追加することにより、定期的に隠された入力を使用し、それがサーバーコントロールを行うことができます。

<input type="hidden" id="myInputId" runat="server" /> 

の背後にあるコードでは、あなたは上記の持っているものと同様の方法で値を読み取ることができます。これは、System.Web.UI.HtmlControls.HtmlInputHidden型になります。

関連する問題