KazanExpress / vue-simple-suggest

Feature-rich autocomplete component for Vue.js
https://kazanexpress.github.io/vue-simple-suggest/
MIT License
461 stars 74 forks source link

autocomplete not working on chrome, probably to browser autocomplition functionality #378

Open bogdan-dubyk opened 3 years ago

bogdan-dubyk commented 3 years ago

I'm submitting a ...

What is the current behavior?

When I click on input in chrome and type something, chrome showing me blue x and because of that, it's not showing a dropdown with possible values after response returned from the backend. On other browsers where I test it (firefox, safari) all works as expected

What is the expected behavior?

When I type something to the input, the app sending a request to the server and after getting a response should show me a dropdown with possible suggestions

How are you importing Vue-simple-suggest?

Please tell us about your environment:

Sample code

   <div class="md-form">
                                          <vue-simple-suggest
                                              v-show="!city.isCityLoading"
                                              v-model="city.searchInput"
                                              :debounce="1000"
                                              :min-length="2"
                                              display-attribute="name"
                                              value-attribute="id"
                                              :list="getCity"
                                              :filter-by-query="false"
                                              @select="citySelect"
                                          >
                                            <input
                                                type="search"
                                                class="form-control"
                                                :placeholder="$t('friend_city_of_birth_placeholder')"
                                                value=""
                                                autocomplete="false"
                                            >
                                          </vue-simple-suggest>
                                          <b-form-input
                                              v-if="city.isCityLoading"
                                              :disabled="true"
                                              :placeholder="$t('cityLoading')"
                                              type="text"
                                              class="form-control"
                                          > </b-form-input>
                                        </div>
                                          ....
                                      data: () => ({
                                          city: {searchInput: null, value: null, isCityLoading: false},
                                     }),
                                     methods: {
                                        // make api call to get suggestions
                                       getCity() {
                                           this.user.city.isCityLoading = true

                                           return asyncPostData( '/api/cities/search', {'cityPattern' : this.user.city.searchInput})
                                              .then(function(data) {
                                                  return  data;
                                              }.bind(this))
                                              .finally(function () {
                                                   this.user.city.isCityLoading = false;
                                              }.bind(this));
                                         },
                                        // trigger on selecting some value from suggestions list
                                        citySelect(value) {
                                             this.user.city.value = value;
                                        },
                                     }

Here also an image of how the input looks like on Chrome with that blue x sign https://gyazo.com/9d011021aab8d55e8ac33dbbbb478543

xlcrr commented 3 years ago

Fixed by wrapping vss in a form and adding autocomplete="off" to the form element

bogdan-dubyk commented 3 years ago

I tried with a autocomplete="off" and did not work. I'm not sure what is a vss, sorry:( can u.show me or link to the place I can read about it?

xlcrr commented 3 years ago
<form autocomplete="off">
   <vue-simple-suggest />
</form>
bogdan-dubyk commented 3 years ago

Oh lol, vss is vue-simple-suggest :)

xlcrr commented 3 years ago

Did it work for you too? Can close this issue if so

bogdan-dubyk commented 3 years ago

Sorry, I did not try it yet, let u know a bit later

bogdan-dubyk commented 3 years ago

no, it's not working for me, I tried to wrap all fields with a <form autocomplete="off"></form> and directly vss as you propose and it's not working :( , And actually as I told I think I already tried that before

xlcrr commented 3 years ago

Do you need this nested <input> element? Try give that autocomplete="false" as well as the form, and try remove it to see if that fixes it. I don't have a nested input element and wrapping vss in a form worked for me

bogdan-dubyk commented 3 years ago

k, I'll try it tomorrow, it's late for me, thanks! And the reason I have that nested element is b-z I need to set a custom class and placeholders, can I do It without nesting that input???

xlcrr commented 3 years ago

Try a simple version first, then add another layer of complexity and see where it breaks

bogdan-dubyk commented 3 years ago

well, now I'm not sure if it's related to autocomplete, when I remove nested input that cross sign gone, but still the dropdown not appearing. I make small videos to show how it works on Chrome and on Firefox (same on safari) , as u can see it working on Firefox.. not sure if it can be helpful.

Not code looks like this:


                            <form autocomplete="off">
                                          <vue-simple-suggest
                                              v-show="!city.isCityLoading"
                                              v-model="city.searchInput"
                                              :debounce="1000"
                                              :min-length="2"
                                              display-attribute="name"
                                              value-attribute="id"
                                              :list="getCity"
                                              :filter-by-query="false"
                                              @select="citySelect"
                                          >
                                          </vue-simple-suggest>

                            </form
kaskar2008 commented 3 years ago

Hello @bogdan-dubyk

Can you provide us a link to reproduction repo/jsfiddle/jsbin stand? Would be much easier to do some debugging. We are using VSS in our production projects and got no such issue.

bogdan-dubyk commented 3 years ago

Sure @kaskar2008 , I'll prepare some sample code

bogdan-dubyk commented 3 years ago

Here is the code sandbox example I made, where I can reproduce the bug https://codesandbox.io/s/stupefied-flower-q3xz4?file=/src/App.vue (HTML is broken as I remove most of the logic)

bogdan-dubyk commented 3 years ago

Is someone able to reproduce the issue and have any thought on how to fix it???

xlcrr commented 3 years ago

Can you simplify the code example? No need for it to be 650 lines

bogdan-dubyk commented 3 years ago

sure, here it is https://codesandbox.io/s/vigorous-cartwright-fiyb3

bogdan-dubyk commented 3 years ago

any updates? :)