Pergunta

I am trying to add some additional jQuery functionality to Magento but my script fails to run and in the browser console I notice this error:

Uncaught TypeError: Object function each(iterator, context) {
    var index = 0;
    try {
      this._each(function(value) {
        iterator.call(context, value, index++);
      });
    } catch (e) {
      if (e != $break) throw e;
    }
    return this;
  } has no method 'toLowerCase' 

Here is my script

<script>
    jQuery(function() {

        jQuery('.temp-variable-price').on('input', function() {
            if(jQuery('input[class=temp-variable-price]').val()=="free")
            {
                jQuery('.temp-variable-price').val('FREE');
            }
        });

        var validOptions = [];
        validOptions.push("FREE");
        var x = 1;
        while (x<1000) {
            if (x<100) {
                validOptions.push(""+x+"p");
            } else {
                var y = x.toString();
                var z = y.split('');
                validOptions.push(""+z[0]+"."+z[1]+""+z[2]+"");
            }
            x++;
        }
        previousValue = "";

        jQuery('.temp-variable-price').autocomplete({
            autoFocus: true,
            source: validOptions
        }).keyup(function() {
            var isValid = false;
            for (i in validOptions) {
                if (validOptions[i].toLowerCase().match(this.value.toLowerCase())) {
                    isValid = true;
                }
            }
            if (!isValid) {
                this.value = previousValue
            } else {
                previousValue = this.value;
            }
        });

    });
</script>

Its nice autocomplete and validate script for certain form fields, you can see a demo here

If anybody knows what this error means I'd be so grateful for an explanation of how to debug and fix this issue?

Foi útil?

Solução

It means validOptions[i] is not a string. Use console.log(validOptions[i]); to find out what it is. It might be undefined.

Optionally you can do the following to ensure it's always a string

validOptions[i].toString().toLowerCase()....
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top