2011-09-13 9 views
0

が奇妙な問題に直面してデータを取得するフォーム要素をスタイリングする際に問題が発生しました。特に選択要素。フォーム要素のスタイルを設定しようとしたときに、ajax

アイデアは簡単です。私は1つのselectを取得し、その状態が変化すると、ajaxを介して、2番目のselectがそのデータを要求にスローします。これまでのところ、すべてが大丈夫です。アヤックスは正常に動作しています。最初の選択がその状態を変えると、選択要素のスタイリングが通常のスタイリングに戻ります。

ライブの例では、2つの主要なファイルを使用してhere

イムを見つけることができ、ファイル1ファイルの重要なコンテンツがこの

<script language="javascript" type="text/javascript"> 

    /* FUNCTION : Ajax Initialize - Start */ 
     function getXMLHTTP() { 
       var xmlhttp=false; 
       try{ 
        xmlhttp=new XMLHttpRequest(); 
       } 
       catch(e) {  
        try{    
         xmlhttp= new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
        catch(e){ 
         try{ 
         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
         } 
         catch(e1){ 
          xmlhttp=false; 
         } 
        } 
       } 

       return xmlhttp; 
      } 
    /* FUNCTION : Ajax Initialize - End */ 


    /* FUNCTION : Get Values - Start */ 
     function getValue(numb) {  

      var strURL="find.php?theValue="+numb; 
      var req = getXMLHTTP(); 

      if (req) { 

       req.onreadystatechange = function() { 
        if (req.readyState == 4) { 
         // only if "OK" 
         if (req.status == 200) {       
          document.getElementById('my_requestDiv').innerHTML=req.responseText;       
         } else { 
          alert("There was a problem while using XMLHTTP:\n" + req.statusText); 
         } 
        }    
       }   
       req.open("GET", strURL, true); 
       req.send(null); 
      }  
     } 
    /* FUNCTION : Get Values - End */ 

</script> 

<form method="post" action="" name="form1" id="example"> 

     <table border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
      <td width="160" class="title_style">What</td> 
      <td width="340"> 
       <select class="select" name="start" onChange="getValue(this.value)"> 
        <option value="">please make a selection</option> 
        <option value="1">Colors</option> 
       </select> 
      </td> 
      </tr> 

      <tr> 
      <td width="160" class="title_style">Result</td> 
      <td width="340"> 
       <div id="my_requestDiv"> 
       <select class="select1" name="my_request" > 
        <option>Please select above first</option> 
       </select> 
       </div> 
      </td> 
      </tr> 

     </table> 

    </form> 

、ユーザーの後で選択要素1を選択し、ajaxで変数をfind.phpに渡す

<?php 

    $what=intval($_GET['theValue']); 

    $link = mysql_connect('localhost', 'YOUR_USERNAME_HERE', 'YOUR_PASSWORD_HERE'); 
    if (!$link) { 
     die('Could not connect: ' . mysql_error()); 
    } 

    mysql_query("SET NAMES 'utf8'", $link); 

    mysql_select_db('cry-for-help'); 

    $query="SELECT id, value FROM my_table WHERE requested='$what'"; 
    $result=mysql_query($query); 

?> 

<select class="select" name="my_request"> 
    <option>make your selection now</option> 
     <?php 
      while($row=mysql_fetch_array($result)) { 
     ?> 
       <option value=<?php echo $row['id']?>><?php echo $row['value']?></option> 
     <?php 
      } 
?> 
</select> 

結果は、2番目の選択要素の内容としてファイル1にポストバックされます。

問題は、スタイリングがなくなったことです。あなたが例をダウンロードすることができ

は、任意の助けをいただければ幸いですhere

ファイル。また、私の英語がそれほど良くないのであれば申し訳ありません。

あなたはリンク先のページに基づいて月

答えて

0

、それは問題はあなたがjqtransformによって生成された余分なHTML要素の全てを交換することで見えます。 JavaScriptのコールバックでは、あなたはこれをやっている:

document.getElementById('my_requestDiv').innerHTML=req.responseText; 

これはそこでプットをjqtransform余分な要素のすべてを吹き飛ばす、div要素の内容全体を置き換えます。あなたが実際にやりたいことは、select要素自体をPHPサービスの結果で置き換えるか、おそらくdivを更新した後に再度jqtransformを実行することです。あなたは、さらに調査する必要があるかもしれないので、

$('select[name="my_request"]').replaceWith(req.responseText); 

私はjqtransformライブラリに精通していないよ:

は、すでにjQueryのを含めているので、私はselect要素を交換するために彼らの強力な選択機能を使用することをお勧めしますどのルートが最も理にかなっているかを確認します。

+0

ご返信いただきありがとうございます。例を指摘することは可能でしょうか?それは本当に助けて、どこを見て私を導くだろう。私はGoogleが私たちの友人であることを知っていますが、正直言って運が全くありませんでした。 – Jan

+0

具体例は何ですか? selectだけを置き換える方法の例を挙げておけば、私の答えにはjQueryベースのものが含まれていますが、あなたが望むのであれば、普通のJavaScriptのコードを思い付くことができます。 jqtransformによって生成されたマークアップの例を意味する場合は、リンク先のサンプルページでView Sourceを実行してください。 jqtransformの使い方の例があれば、私はそこでお手伝いできません。 –

+0

jmmcduffie、申し訳ありませんが、私は間違っています。私はjQueryでそれを行う方法を見つけましたが、正直言って、これはまったく機能しません。私は、javascriptまたはjQuery関数のどちらかが正常に機能していることを意味しています。つまり、問題はjqtransformと思われます。 – Jan

関連する問題