Problems with closeField
JonathanC at ag.nsw.gov.au
JonathanC at ag.nsw.gov.au
Tue Sep 7 05:41:17 EDT 2004
I can't believe I'm having a problem with something as simple as
"closeField"! :-)
I have a field which works like the Address bar of Internet Explorer. When
you start typing into it, it tries to finish the word or phrase, according
to a list in a separate field (which will eventually be hidden). If you
end up typing a NEW word or phrase, you are asked if you would like this
added to the list, for next time. I got it to work fine in HyperCard, but
I'm stumped by the strange behaviour of "closeField".
Here are the essential scripts (watch for wrapped lines):
CARD:
on openCard
global autoCompleteList
put fld "Auto-complete list" into autoCompleteList
end openCard
FIELD 'AUTO-COMPLETE':
on keydown k
global autoCompleteList
if autoCompleteList = "" then pass keyDown
if " " & charToNum(k) & " " is in " 3 8 9 13 28 29 30 31 " then pass
keyDown
put k into selection
put me into what
if what="" then pass keydown
get offset(return & what,return & autoCompleteList)
if it>0 then
put the number of lines in (char 1 to it of autoCompleteList) into
thisline
put line thisline of autoCompleteList into me
select char length(what)+1 to length(me) of me
end if
end keydown
on closeField
global autoCompleteList
put me into temp
if temp <> "" and not (temp is among the lines of autoCompleteList) then
answer "Add" && quote & temp & quote && "to auto-complete list?" \
with "Cancel" or "OK"
if it = "OK" then
if last char of autoCompleteList <> return and the length \
of autoCompleteList > 0 then put return before temp
put temp after autoCompleteList
put autoCompleteList into fld "Auto-complete list"
end if
end if
pass closeField
end closeField
Here's an explanation of the problem(s):
The "Auto-complete" field contains a closeField handler, which checks its
contents against another field ("Auto-complete list") and offers to add a
new line, if required.
However, the closeField handler seems to only be triggered when the field
is EMPTIED.
Expected behaviour (i.e. closeField triggered when new text is entered ...
or the field is emptied) returns when the keydown handler is removed from
the script of field "auto-complete" (or commented out).
Then a NEW problem occurs: If you enter a word/phrase that doesn't appear
in the "Auto-complete list" field and then click out of the field, an
answer dialog appears:
Add <new text> to auto-complete list?
If you click "Cancel", the focus returns to the "Auto-complete" field.
Then, if you click out of the field again, the whole thing starts again!
And so on, until you click "OK".
This is weird: Why does closeField not get triggered when (I think) it
should, but then get triggered when (I think) it shouldn't?
Passing or not passing "closeField" makes no difference.
I have uploaded the stack to
http://www.artgallery.nsw.gov.au/sub/filechute/closeField_problem.zip (4K
zipped).
Thanks,
Jonathan Cooper
Manager of Information / Website
Art Gallery of New South Wales
Sydney, Australia
http://www.artgallery.nsw.gov.au
More information about the use-livecode
mailing list