2015-03-05 2 views
1

У меня возникла настоящая проблема со следующим сценарием, где я пытаюсь сравнить выбранные пользователем входные данные (#texto div) в AJAX, называемый XML-файлом, и вернуть элемент (price) в другой div (#divo). Кажется невозможным сравнить переменную text1 с различными атрибутами XML? Когда я ввожу имя атрибута вместо переменной text1, он работает. Надеюсь, я достаточно ясен.Анализ xml из ответа JQuery Ajax

Благодарим за помощь!

Первый файл XML:

<priceitem> 
<name itemname="Ham Brie"><price>9.00</price></name> 
<name itemname="croque monsieur"><price>8.00</price></name> 
</priceitem> 

Теперь скрипт JQuery:

$(function() { 
$("#texto").select(function() { 
    var text1 = $("#texto").val(); 

$.ajax({ 
    type: "GET", 
    url: "price.xml", 
    dataType: "xml", 
    success: function(xml) { 
    parsexml(xml); 
    } 
    }); 


function parsexml(xml) { 
    $(xml).find('priceitem').each(function() { 
    var att = $(this).find('name').attr('itemname'); 
    var price = $(this).find('price').text(); 
    if (att == text1) { 
    $('#divo').append(price); 
    } 
    else { 
    alert('problem!'); 
    } 
}); 
    } 
}); 
}); 

ответ

1

UPDATE:

У меня возникли серьезные проблемы с следующий сценарий, где я пытаюсь сравните выбранные пользователем входные данные (#texto div) с AJAX, называемым XML-файлом, и верните элемент (цена) в другой div (#divo).

Вот проблема прямо там ...

  1. Вы можете вызвать val() только формы управления на местах - вещи, которые имеют атрибут value.
  2. Вы не получите желаемое значение, даже если бы вы могли позвонить val на DIV, потому что вы хотите получить значение не всего DIV. Для того, чтобы получить, что вам нужно, чтобы получить эти данные из window.getSelection() в современных и стандартов браузеров, или document.selection.createRange() в IE < 9.
  3. Наконец jQuery.select работает только на input и textarea элементов, а также, так что событие не будет даже не уволят для DIV.

    From the docs:

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

    Вам нужно будет использовать ряд других мероприятий для того, чтобы сделать это как mousedown и mouseup, но его будет немного сложнее. Или, возможно, есть плагин, который вы можете использовать, но у меня его нет, я могу порекомендовать его.


priceitem является корневой узел, так что вы не можете find это. Вам нужно настроить ваш код:

function parsexml(xml) { 
    $(xml).find('name').each(function() { 
    var att = $(this).attr('itemname'); 
    var price = $(this).find('price').text(); 
    if (att == text1) { 
    $('#divo').append(price); 
    } 
    else { 
    alert('problem!'); 
    } 
}); 
    } 

Пример: http://jsfiddle.net/2gt1f44f/

+0

Вы правы на этой части. Однако сценарий не вставляет переменную цену в #divo. и когда я пытаюсь предупредить var att, я получаю undefined ???? – pisanmc

+0

Какой тип элемента '# texto'? Я думаю, может быть, вы запутались в том, что делает функция '' jQuery.select() ') (http://api.jquery.com/select/) и связанное с ней событие ... Вы должны опубликовать соответствующий HTML-код работают. – prodigitalson

0

Слава Богу за console.log! У меня была глупая ошибка в моем php-скрипте, который сгенерировал datalist (одно дополнительное пространство, поэтому text1 и att, где никогда не было равным ..... Теперь он работает. Не могу поверить, что я трачу часы на такую ​​глупую ошибку ....Урок: всегда используйте console.log. Спасибо всем!

+0

Итак, как вы получили событие, чтобы стрелять по DIV? – prodigitalson

+0

Извините, это был долгий день, и я допустил ошибку. Я имел в виду id для texto (со ссылкой на ввод) и div для ответа. – pisanmc

+0

Хорошо, что имеет больше смысла ... Спасибо за продолжение :-) – prodigitalson

Смежные вопросы