Friday, May 17, 2024
 Popular · Latest · Hot · Upcoming
194
rated 0 times [  196] [ 2]  / answers: 1 / hits: 38325  / 13 Years ago, thu, april 21, 2011, 12:00:00

I'm using this HTML code:



<form action=# method=post>
<fieldset>
<label class=desc id=title10 for=Field10>
How many children do you have?
</label>
<select id=Field10 name=Field10 class=field select large tabindex=5>
<option value=0 selected=selected>0 </option>
<option value=1>1 </option>
<option value=2>2 </option>
<option value=3>3 </option>
<option value=4>4 </option>
<option value=5>5 </option>
<option value=6>6 </option>
<option value=7>7 </option>
<option value=8>8 </option>
<option value=9>9 </option>
</select>
<input type=submit value=Send message />
</fieldset>
</form>


<select> is not working on iPhone and Android. When I tap on the selectbox nothing happens.



I'm using iScroll 4 which is creating the problem.



<script type=application/javascript src=iscroll-lite.js></script>
<script type=text/javascript>
var myScroll;
function loaded() {
myScroll = new iScroll('wrapper');
}
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
document.addEventListener('DOMContentLoaded', loaded, false);
</script>


I think this is a solution but I don't know how to implement it.


More From » android

 Answers
1

The problem is that iScroll cancels the default behavior of your select tag (Not a very good implementation if you ask me).



This occurs in the _start() function on line 195:



e.preventDefault();


If you comment that out you'll notice the select tag works again.



But commenting it out means you've hacked the library which might break other desirable iScroll functionality. So here's a better workaround:



var selectField = document.getElementById('Field10');
selectField.addEventListener('touchstart' /*'mousedown'*/, function(e) {
e.stopPropagation();
}, false);


That code will allow the default behavior to occur, without propagating the event to iScroll where it screws everything up.



Since your JS is not inside any jQuery-like onReady() event, you'll have to make sure to you put this code AFTER the HTML where your select elements are defined.



Note that for mobile devices the event is touchstart, but for your PC browser it will be mousedown


[#92629] Tuesday, April 19, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
kieraelsies

Total Points: 718
Total Questions: 103
Total Answers: 104

Location: England
Member since Sun, May 21, 2023
1 Year ago
kieraelsies questions
Tue, Aug 3, 21, 00:00, 3 Years ago
Tue, Feb 23, 21, 00:00, 3 Years ago
Thu, Nov 12, 20, 00:00, 4 Years ago
Wed, Sep 9, 20, 00:00, 4 Years ago
Mon, Sep 16, 19, 00:00, 5 Years ago
;