Переменная jQuery, утверждающая, что она не определена, когда она была определена - PullRequest
0 голосов
/ 20 ноября 2011

Я пытаюсь иметь два автозаполнения текстовых полей, одно для модели телефона - input1 и одно для прошивки - input2 на одной странице. Когда оба заполнены, я хочу, чтобы div отображался с идентификатором input1input2, но при вводе значения в input1 он утверждает, что переменная для телефона не определена, а при заполнении второго он утверждает, что phoneid не определен. Вот HTML

<div id="formcontainer">
<input id="input1"/>
<input id="input2"/>
</div>
<div id="iphone2g1.1" class="info" style="display:none">iPhone 2G</div>
<div id="iphone2g1.2" class="info" style="display:none">iPhone 3G</div>
<div id="iphone2g1.3" class="info" style="display:none">iPhone 3GS</div>
<div id="iphone2g1.4" class="info" style="display:none">iPhone 4</div>
<div id="iphone2g1.5" class="info" style="display:none">iPhone 4S</div>

JQuery

$("#input1").autocompleteArray(["iPhone 2G","iPhone 3G","iPhone 3GS","iPhone 4","iPhone 4s"],
    {   minChars:1,
        matchSubset:1,
        onItemSelect:selectPhone,
        onFindValue:findPhone,
        autoFill:true,
        maxItemsToShow:10,
        selectFirst:true,
    });

$("#input2").autocompleteArray(["1.1","1.2","1.3","1.4","1.5"],
{   minChars:1,
    matchSubset:1,
    onItemSelect:selectFirmware,
    onFindValue:findFirmware,
    autoFill:true,
    maxItemsToShow:10,
    selectFirst:true,
    });

function findPhone(li) {
    if( li == null ) return alert("No match!");
    var phone = li.selectPhone;
    var phoneid = phone.replace("iPhone ","iphone").toLowerCase();
};

function findFirmware(li) {
    if( li == null ) return alert("No match!");
    var firmware = li.selectFirmware;
    $(".info").hide
    $(phoneid+firmware).show
};

function selectPhone(li) {
    findPhone(li);
}

function selectFirmware(li) {
    findFirmware(li);
}

Я использую этот для плагина автозаполнения. Страницу можно посмотреть здесь .

Спасибо.

EDIT1 Вот так выглядит jQuery, но все равно выдает ту же ошибку.

    var phone;
    var phoneid;
    var firmware;
    var firmwareid;

$("#input1").autocompleteArray(["iPhone 2G","iPhone 3G","iPhone 3GS","iPhone 4","iPhone 4s"],
{   minChars:1,
    matchSubset:1,
    onItemSelect:selectPhone,
    onFindValue:findPhone,
    autoFill:true,
    maxItemsToShow:10,
    selectFirst:true,
});

$("#input2").autocompleteArray(["1.1","1.2","1.3","1.4","1.5"],
{   minChars:1,
    matchSubset:1,
    onItemSelect:selectFirmware,
    onFindValue:findFirmware,
    autoFill:true,
    maxItemsToShow:10,
    selectFirst:true,
    });



function findPhone(li) {
    if( li == null ) return alert("No match!");
    phone = li.selectPhone;
    phoneid = phone.replace("iPhone ","iphone").toLowerCase();
};

function findFirmware(li) {
    if( li == null ) return alert("No match!");
    firmware = li.selectFirmware;
    firmwareid = phone.replace(".","");
    $(".info").hide
    $(phoneid+firmware).show
};

function selectPhone(li) {
    findPhone(li);
}

function selectFirmware(li) {
    findFirmware(li);
}

Ответы [ 4 ]

0 голосов
/ 23 ноября 2011

Проблема в периодах в атрибутах идентификатора вашего div и в вашей функции findFirmware(), измените его на

function findFirmware(li) {
    if( li == null ) return alert("No match!");
    firmware = li.selectFirmware;
    firmwareid = phone.replace(".","");
    $(".info").hide();
    $('#' + phoneid + firmwareid).show(); // This line was messed up
};

Есть две проблемы с этой строкой $(phoneid+firmware).show, хорошо четыре, если вы считаете недостающие скобки и точки с запятой, но ...

  1. У div, который вы пытаетесь показать, есть идентификатор, у вас нет # в селекторе, чтобы выбрать элемент по ID
  2. firmware содержит непарсированную строку с точкой, поэтому phoneid + firmware становится iphone2g1.2, когда ваш div-идентификатор равен iphone2g12, поэтому вам нужно было использовать firmwareid, в котором вы его проанализировали.

Демонстрация скрипки: http://jsfiddle.net/AaNWM/

0 голосов
/ 20 ноября 2011

Он не определен в любом месте, доступном для функции findFirmware() - он определен как var в findPhone(), следовательно, локально для этой функции.

Не уверен, что подразумевается под такими вещами, как li.selectFirmware и т. Д., Но они тоже сломаются.

0 голосов
/ 20 ноября 2011

Проблема в символе . в идентификаторе.

В основном1, имя должно начинаться с подчеркивания (_), тире (-) или буквы (a – z).), за которым следует любое количество тире, подчеркиваний, букв или цифр.Есть загвоздка: если первый символ - тире, второй символ должен2 быть буквой или подчеркиванием, а имя должно быть длиной не менее 2 символов.

Какие символы действительныв именах / селекторах классов CSS?

0 голосов
/ 20 ноября 2011

Это, вероятно, проблема с ограничениями. Попробуйте добавить это в начало вашего скрипта:

var phone;
var phoneid;

Впоследствии пропустить var

phone = li.selectPhone;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...