Skip to content

Commit 15ef1ef

Browse files
authored
Merge pull request #1868 from JimishF/master
Fixed select() issue with existing dropdown
2 parents ee02e84 + d393506 commit 15ef1ef

File tree

3 files changed

+47
-9
lines changed

3 files changed

+47
-9
lines changed

lib/addons/p5.dom.js

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,10 @@
188188
return converted;
189189
} else if (elt.tagName === "VIDEO" || elt.tagName === "AUDIO") {
190190
return new p5.MediaElement(elt);
191-
} else {
191+
} else if ( elt.tagName === "SELECT" ){
192+
return createSelect( new p5.Element(elt) );
193+
}
194+
else {
192195
return new p5.Element(elt);
193196
}
194197
}
@@ -525,9 +528,11 @@
525528

526529
/**
527530
* Creates a dropdown menu <select></select> element in the DOM.
531+
* It also helps to assign select-box methods to p5.Element when selecting existing select box
528532
* @method createSelect
529-
* @param {boolean} [multiple] true if dropdown should support multiple selections
530-
* @return {Object|p5.Element} pointer to p5.Element holding created node
533+
* @param {boolean} [multiple] true if dropdown should support multiple selections OR
534+
* @param {Object|p5.Element} if wrapping methods to existing select
535+
* @return {Object|p5.Element} pointer to p5.Element holding created or existing node
531536
* @example
532537
* <div><code>
533538
* var sel;
@@ -550,12 +555,20 @@
550555
* }
551556
* </code></div>
552557
*/
553-
p5.prototype.createSelect = function(mult) {
554-
var elt = document.createElement('select');
555-
if (mult){
556-
elt.setAttribute('multiple', 'true');
558+
559+
p5.prototype.createSelect = function() {
560+
var elt,self;
561+
var arg = arguments[0];
562+
if( typeof arg === 'object' && arg.elt.nodeName == 'SELECT' ){
563+
self = arg;
564+
elt = this.elt = arg.elt;
565+
}else{
566+
elt = document.createElement('select');
567+
if( arg && typeof arg === 'boolean' ){
568+
elt.setAttribute('multiple', 'true');
569+
}
570+
self = addElement(elt, this);
557571
}
558-
var self = addElement(elt, this);
559572
self.option = function(name, value){
560573
var opt = document.createElement('option');
561574
opt.innerHTML = name;
@@ -575,7 +588,7 @@
575588
}
576589
return this;
577590
}else{
578-
if (mult){
591+
if (arg){
579592
for (var i = 0; i < this.elt.selectedOptions.length; i++){
580593
arr.push(this.elt.selectedOptions[i].value);
581594
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<html>
2+
<head>
3+
<script language="javascript" type="text/javascript" src="../../../../../lib/p5.js"></script>
4+
<script language="javascript" type="text/javascript" src="../../../../../lib/addons/p5.dom.js"></script>
5+
<script language="javascript" src="sketch.js"></script>
6+
</head>
7+
8+
<body>
9+
</body>
10+
</html>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function setup() {
2+
// Created a dropdown in DOM
3+
var dropdown = createSelect();
4+
dropdown.option('apple');
5+
dropdown.option('mango');
6+
dropdown.id("fruitlist");
7+
console.log( dropdown );
8+
9+
// Selected a dropdown from DOM
10+
var dropdown = select('#fruitlist');
11+
dropdown.option('applex');
12+
dropdown.option('mangox');
13+
console.log( dropdown );
14+
15+
}

0 commit comments

Comments
 (0)