Извинения за длинный вопрос, но я пробовал много вещей и сделал некоторые исследования, и havent нашел большую часть решения. У меня есть редактируемый контент div.contentEditable and lastChild IE, Firefox & Chrome LastChild
<div contentEditable=true onkeyup='showResult(this.lastChild.textContent)'></div>
Когда пользователь вводит что-то в этом DIV, то showResult Javascript работает, который является в основном запрос Ajax, который возвращает список элементов, которые соответствуют. Когда пользователь нажимает на одно из предложений, скажем, имя «Джон», пролет с предложением добавляется в этот contentEditable DIV так:
<div contentEditable=true onkeyup='showResult(this.lastChild.textContent)'>
<span id='uniqueId1' class='SpanClass' contentEditable='false'>John</span>
</div>
Выбрав одно имя, пользователь может захотеть искать другое имя. Это HTML термины, это означает, что они будут вводить следующее:
<div contentEditable=true onkeyup='showResult(this.lastChild.textContent)'>
<span id='uniqueId1' class='SpanClass' contentEditable='false'>John</span>
New User Text Goes Here
</div>
В Chrome Правильное поведение происходит, когда пользователь продолжает попытки набора текста в DIV - функция showResult работает на новом тексте, который пользователь и игнорирует элементы span. Например, если пользователь вводит в «Fr» уже выбранный John, он игнорирует первых детей (John) и отправляет то, что пользователь вводил с помощью ajax, и возвращает такие предложения, как Fred and Frankie.
Однако, в IE промежуток по-прежнему доступен для редактирования, и пользователь не может добавить текст, отличный от интервала, что кажется бессмысленным, поскольку оно явно contentEditable = false. Поэтому запрос ajax выполняется на Текст «Джон» плюс все, что пользователь вводит в следующем, чего я не пытаюсь достичь.
Наконец, в Firefox, продолжительность не contentEditable НО LastChild бит только поднимает текст в пролете, и игнорирует текст пользователь помещает в.
Я консольный вошли результаты showResult (это .lastChild.textContent), чтобы узнать, что отправляется в запрос ajax.
В Chrome, набрав «Fr» в поле после диапазона «Джон», отправляет «Fr» в ajax и возвращает правильный результат.
В IE, напечатав в "Fr" в поле "посылает JohnFr"
В Firefox, набрав в "Fr" просто посылает "Джон".
Поскольку проблема с этой последней версией и диапазоном, я также включил Javascript, который создает элемент span. Это активируется только после того, как результат будет возвращен, и результат будет нажат. (Пожалуйста, простите за очень грязный Javascript/Jquery)
$('body').on("click", '.TagHints', function(){
//Once you click on the suggestion
var ThisData = $(this).data("id");
var ThisId = $(this).attr("id");
var ThisTag = $(this).data("tag");
//delete the text that the user typed in
elementToRemove = document.getElementById("FakeInput").lastChild;
document.getElementById("FakeInput").removeChild(elementToRemove);
var TagDiv = document.createElement('span');
TagDiv.className = 'SpanClass';
TagDiv.id = ThisId;
TagDiv.innerHTML = ThisTag;
TagDiv.contentEditable=false;
//append the Span to the contentEditable div
document.getElementById("FakeInput").appendChild(TagDiv);
var TagHints = document.getElementsByClassName("TagHints");
while(TagHints.length > 0){
TagHints[0].parentNode.removeChild(TagHints[0]);
}
});
Почему три браузеры ведут себя совершенно по-разному, и как я могу получить их все ведут себя как Хром? Есть ли лучший способ получить текст не в промежутках?
Я прочитал еще один ответ, что firefox любит входные данные, а IE любит перерывы в этом контексте, но оба не работают для меня. :-(.
Один большой пробник для хороших решений - это то, что jQuery перестает работать после строки 6, что также полностью озадачило меня. Если кто-нибудь может объяснить, почему он не работает, это тоже будет круто. с ним будет ajax-запрос и контент, созданный после загрузки jquery?
Благодарим за помощь!
Я работаю над командой IE и интересовался этим вопросом, поэтому я разработал скрипку, чтобы исследовать три основных подхода. Вы можете найти [результаты] (https://twitter.com/jonathansampson/status/546471628679294976), представляющие интерес. Я не сразу увидел спецификацию, которая указывает, какие браузеры подхода * должны принимать, но это похоже на то, что IE и Chrome сходятся. – Sampson