• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Wieso geht mein JavaScript Code nicht im iPhone Browser?

hornig

Empire
Registriert
12.08.08
Beiträge
84
moien,

ich versuche mich gerade an javascript und habe mir was gebastelt, dank einiger hilfe aus http://www.coding-board.de/board/showthread.php?t=28005

ich bin nun soweit, dass es in meinem firefox auf dem rechner funktioniert und ich hatte es spasseshalber mit meinem iphone aufgerufen, doch das zeigt mir dann nicht das an, was ich gerne hätte und was im firefox funktioniert.

Code:
<html>
<head>
<script type="text/javascript">
var objInput, objOutput;
var objXMLHTTP, blnBrowserSupportsAJAX = true;
   try
   {
       objXMLHTTP = new XMLHttpRequest();
   }
   catch(e)
   {
       try
       {
           objXMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");
       }
       catch(e)
       {
           try
           {
               objXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
           }
           catch(e)
           {
               blnBrowserSupportsAJAX = false;
               objOutput.style.display = "none"; // mach das select unsichtbar, wenn kein ajax geht
           }
       }
   }
function init()
{
    objInput = document.getElementById("input");
    objOutput = document.getElementById("output");
}
 
function fill () {
    if(objXMLHTTP.readyState == 0 || objXMLHTTP.readyState == 4)
    {
       objXMLHTTP.open("GET", "http://horn.hdtvtotal.com/download/select3.php?q=" + encodeURIComponent(objInput.value), true);
       objXMLHTTP.onreadystatechange = XMLHTTP_onreadystatechange;
       objXMLHTTP.send(null);
    }
}
function XMLHTTP_onreadystatechange()
{
    if(objXMLHTTP.readyState == 4)
    {
       //alert(objXMLHTTP.responseText);
       var option =objXMLHTTP.responseXML.documentElement.getElementsByTagName("option");
       //alert("optionenlaenge" + option.length);
       for (i=0;i<option.length;i++)
       {
         name=option[i].getElementsByTagName("name");
         value=option[i].getElementsByTagName("value");
         
           //alert(name[0].firstChild.nodeValue);
           objOutput.options[i] = new Option(name[0].firstChild.nodeValue, value[0].firstChild.nodeValue, false, false);
       }
    }
}
</script>



</head>
<body onload="init()">
<form name="form1" method="post" action="create_waggle_link.php">
  <label>1. Input
  <input type="text" name="input" id="input" onkeyup="fill(this.value)">
  </label>
  <label>2. Output
  <select name="output" id="output">
  </select>
  </label>
  <input type = "submit" name = "submit">
</form>
</body>
</html>

was das JS macht ist, dass wenn man ins inputfeld was tippt, bei jedem anschlag den text aus dem inputfeld nimmt, es zu einem php skript schickt (das bis jetzt nur ein platzhalter ist!), dort werden lösungen als xml zurückgeschickt und die werden dann im output feld als dropdownliste angezeigt. die dropdownliste wird beim iphone aber nicht gefüllt, aber ich sehe das "ladensymbol" im browser, also wird auf jedenfall das getippte weggesendet.
wer es einmal testen möchte http://horn.hdtvtotal.com/download/selectformvorfuell1.html

kann mir da jemand weiterhelfen, wie man fürs iphone javascript schreiben muss? ich hoffe, dass man es auch einfach in das bestehende integrieren kann und ich jetzt nicht üfr jeden browser etwas eigenes schreiben muss.

grüße, Andreas
 

gKar

Maunzenapfel
Registriert
25.06.08
Beiträge
5.362
Teste mal mit Desktop-Safari (ggf. debuggen), das dürfte dann ja eigentlich auch nicht gehen.

Ich bin mir derzeit nicht ganz sicher, aber ich schätze mal, man kann nicht einfach zu einem Array objOutput.options auf Deine Weise Elemente hinzufügen (indem man einfach einen Index angibt und etwas zuweist). Zumindest in den mir bekannten Sprachen muss man erstmal ein Array der passenden Größe erzeugen.

Bzw. ich nutze in solchem Ajax-Zusammenhang eher Code wie den folgenden:
Code:
function appendToSelect(select, value, content) {
    var opt;
    opt = document.createElement("option");
    opt.value = value;
    opt.appendChild(document.createTextNode(content));    
    select.appendChild(opt);
}
 

hornig

Empire
Registriert
12.08.08
Beiträge
84
moien,

so, ich hab nun was umgebaut und es geht nun. oder ist das bei euch anders? konnte nur mit firefox, ie un diphone browser testen.

Code:
[COLOR=#000080]<html>[/COLOR]
[COLOR=#000080]<head>[/COLOR]
[COLOR=#800000]<script type=[COLOR=#0000FF]"text/javascript"[/COLOR]>[/COLOR]
var objInput, objOutput;
var objXMLHTTP, blnBrowserSupportsAJAX = true;
   try
   {
       objXMLHTTP = new XMLHttpRequest();
   }
   catch(e)
   {
       try
       {
           objXMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");
       }
       catch(e)
       {
           try
           {
               objXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
           }
           catch(e)
           {
               blnBrowserSupportsAJAX = false;
               objOutput.style.display = "none"; // mach das select unsichtbar, wenn kein ajax geht
           }
       }
   }
function init()
{
    objInput = document.getElementById("input");
    objOutput = document.getElementById("output");
}
 
function fill () {
    if(objXMLHTTP.readyState == 0 || objXMLHTTP.readyState == 4)
    {
       objXMLHTTP.open("GET", "http://horn.hdtvtotal.com/download/select3.php?q=" + encodeURIComponent(objInput.value), true);
       objXMLHTTP.onreadystatechange = XMLHTTP_onreadystatechange;
       objXMLHTTP.send(null);
    }
}
function XMLHTTP_onreadystatechange()
{
    if(objXMLHTTP.readyState == 4)
    {
       // source: http://www.captain.at/howto-ajax-xml-javascript.php
       var root = objXMLHTTP.responseXML.getElementsByTagName('suggestions')[0];

       var options = root.getElementsByTagName("option");
       for (var i = 0 ; i [COLOR=#000080]< options.length ; i++) {
         var name = options[i].getElementsByTagName("name")[0].firstChild.nodeValue;
         var value = options[i].getElementsByTagName("value")[0].firstChild.nodeValue;
         //alert("value = " + value + " name = " + name);

         objOutput.options[i] = new Option(name,value,false,false);
       }
    }
}
</script>[/COLOR]



[COLOR=#000080]</head>[/COLOR]
[COLOR=#000080]<body onload=[COLOR=#0000FF]"init()"[/COLOR]>[/COLOR]
[COLOR=#FF8000]<form name=[COLOR=#0000FF]"form1"[/COLOR] method=[COLOR=#0000FF]"post"[/COLOR] action=[COLOR=#0000FF]"create_waggle_link.php"[/COLOR]>[/COLOR]
  [COLOR=#FF8000]<label>[/COLOR]1. Input
  [COLOR=#FF8000]<input type=[COLOR=#0000FF]"text"[/COLOR] name=[COLOR=#0000FF]"input"[/COLOR] id=[COLOR=#0000FF]"input"[/COLOR] onkeyup=[COLOR=#0000FF]"fill(this.value)"[/COLOR]>[/COLOR]
  [COLOR=#FF8000]</label>[/COLOR]
  [COLOR=#FF8000]<label>[/COLOR]2. Output
  [COLOR=#FF8000]<select name=[COLOR=#0000FF]"output"[/COLOR] id=[COLOR=#0000FF]"output"[/COLOR]>[/COLOR]
  [COLOR=#FF8000]</select>[/COLOR]
  [COLOR=#FF8000]</label>[/COLOR]
  [COLOR=#FF8000]<input type = "submit" name = "submit">[/COLOR]
[COLOR=#FF8000]</form>[/COLOR]
[COLOR=#000080]</body>[/COLOR]
[COLOR=#000080]</html>[/COLOR]
http://horn.hdtvtotal.com/download/neu1.html

grüße, Andreas