Closed GoogleCodeExporter closed 9 years ago
This happens because of 2 things:
1. Bad unicode string comparison in PHP
2. Using val() on select elements - selected will be options with attribute
"value"
OR options with TEXT equal to val() parameter
Now those two reasons in combination has been selecting last option (which text
without unicode was same as requested value). There is no clean fix, but there
are
couple of workarounds:
1. Compare strings and then their lengths
2. Convert strings to HTML Entities and then compare
3. Binary safe compare ?
Ive chosen 1st one and it's available in r331.
Original comment by tobiasz....@gmail.com
on 21 Jan 2009 at 4:39
Thanks tobiaz ;) I'll try it :).
Hope you're alright :).
Original comment by nicolas....@gmail.com
on 21 Jan 2009 at 4:44
It seems to be not fixed for me :(.
It always do the same.
An idea : the text between the <option/> tag should be use only if value isn't
define... nop ?
Original comment by nicolas....@gmail.com
on 22 Jan 2009 at 8:30
Testing code:
$doc = phpQuery::newDocument('<select name="section"><option
value="-1">Niveau</option><option value="1">6°</option><option
value="2">5°</option><option
value="3">4°</option><option value="4">3°</option></select>');
print $doc['select']->val(3);
Please also test:
print strlen('3°');
What is your PHP version ?
> An idea : the text between the <option/> tag should be use only if value isn't
> define... nop ?
phpQuery does it just like jQuery.
Original comment by tobiasz....@gmail.com
on 22 Jan 2009 at 9:03
Your testing code work for me.
print strlen('3°'); return "3".
Note that I use info from database. In my database I store info "encoded", so I
have
"3°" instead of "3°"... but after inserting it in the doc with phpQuery using
something like
$listeSection_elements = $DOM_arbre->find('select[name="section"]');
if
($listeSection_elements->length()==1&&isset($section_infos)&&is_array($section_i
nfos->resultat))
{
foreach ($section_infos->resultat as $section)
{
$listeSection_elements->append('<option
value="'.$section['id'].'">'.$section['libelle'].'</option>');
}
}
I use PHP 5.2.6.
Disucss the point about the use of the value or the text on the HTML channel,
I'm now
sure that, in a form, if an option have a value attribute it will be use
instead of
text as submited value.
So I could say that if jQuery don't do that... jQuery is false :x.
Original comment by nicolas....@gmail.com
on 22 Jan 2009 at 10:11
Again, using 3° in this code:
$doc = phpQuery::newDocument('<select name="section"><option
value="-1">Niveau</option><option value="1">6°</option><option
value="2">5°</option><option
value="3">4°</option><option value="4">3°</option></select>');
print $doc['select']->val(3)->end();
works for me.
Could you do strlen($section['libelle']) inside this foreach ?
> So I could say that if jQuery don't do that... jQuery is false :x.
Personally i was terrified when i found this out (jQuery-1.3.js lines 467-468).
Never
suspected such behavior from val(), but being honest i never trusted it fully ;)
From project's point of view, there should be strict main API behavior
compatibility,
which can bring various benefits.
You can file a ticket against this in jQuery bugtracker:
http://dev.jquery.com/newticket/
Original comment by tobiasz....@gmail.com
on 22 Jan 2009 at 1:05
The code is working for me too :s.
Doing a strlen($section['libelle']) inside this foreach it gives me "6" as
result.
I post on bug tracker here http://dev.jquery.com/ticket/3953
Original comment by nicolas....@gmail.com
on 22 Jan 2009 at 1:37
The problem is in this code :
<php>
$optionValue = $option->attr('value');
$optionText = $option->text();
$optionTextLenght = mb_strlen($optionText);
foreach($_val as $v)
if ($optionValue == $v)
$selected = true;
else if ($optionText == $v && $optionTextLenght == mb_strlen($v))
$selected = true;
</php>
If the option is
<dom>
<option value="3">3°</option>
</dom>
Doing : <php>$myoption->text()</php> return "3"... not "3°" ! only html()
return
"3°".
Original comment by nicolas....@gmail.com
on 26 Jan 2009 at 3:06
Interesting... fixed in jQuery ^^ ! http://dev.jquery.com/ticket/3104
Original comment by nicolas....@gmail.com
on 28 Jan 2009 at 8:52
Original comment by tobiasz....@gmail.com
on 11 Feb 2009 at 8:58
Fixed same way as in jQuery in r354.
Original comment by tobiasz....@gmail.com
on 16 Feb 2009 at 5:03
Fabulous ! Thanks :).
Original comment by nicolas....@gmail.com
on 17 Feb 2009 at 7:58
Original issue reported on code.google.com by
nicolas....@gmail.com
on 20 Jan 2009 at 10:09