Используйте XPath или onClick или onblur для выбора элемента и используйте jQuery для размытия этого элемента

#javascript #jquery #html #xpath

#javascript #jquery #HTML #xpath

Вопрос:

* ОБНОВЛЕНИЕ: я новичок jQuery , а также использую XPath , и я изо всех сил пытаюсь найти правильное рабочее решение, которое будет blur динамически создаваться HTML element . Я .onblur event подключил (работает не так, как ожидалось) и попытался использовать $(document.activeElement) , но моя реализация может быть неверной. Я был бы признателен за любую помощь в создании рабочего решения, которое будет размывать this element ( jqInput ), когда пользователь нажимает в любом месте за пределами активного element . Я добавил HTML и jQuery/JavaScript ниже.

Некоторые идеи, которые у меня были:

(1) Используйте XPath для выбора dynamic HTML element ( jqInput ) , а затем используйте jQuery's .onClick метод blur this element , когда пользователь нажимает в любом месте за пределами области XPath выделенного element .

(2) Используйте $(document.activeElement) , чтобы определить, где .onblur должен сработать:

 var thisTitle = input0;

var activeElement = $(document.activeElement);

if (thisTitle != activeElement) {
    jqInput.hide();
    _layout.viewHeaderTextInput.inputOnBlurHandler(canvasObj, jqHeaderText, jqInput);
}
 

Я открыт для всех рабочих решений. И, надеюсь, это ответит на чей-то вопрос в будущем.

Моя проблема: несколько elements активны, и .onblur не срабатывает. Смотрите изображение ниже:

ПРИМЕЧАНИЕ: <input /> поле имеет focus , а также <div> слева от (синий контур). Если пользователь щелкает где-либо за пределами этого <input /> , к blur нему должно быть применено element .

Мой код: jQuery и JavaScript

Это фрагмент кода, в котором создаются переменные jqInput и input0:

 var jqInput = null;

if (jqHeaderText.next().hasClass("inline-editable"))
{
    //Use existing input if it already exists 
    jqInput = jqHeaderText.next();
}
else
{
    //Creaet a new editable header text input
    jqInput = $("<input class="inline-editable" type="text"/>").insertAfter(jqHeaderText);
}

var input0 = jqInput.get(0);

//Assign key down event for the input when user preses enter to complete entering of the text
input0.onkeydown = function (e)
{
    if (e.keyCode === 13)
    {
        jqInput.trigger("blur");
        e.preventDefault();
        e.stopPropagation();
    }
};
 

Это мой .onblur event и мой помощник method в blur element :

 input0.onblur = function ()
{
    _layout.viewHeaderTextInput.inputOnBlurHandler(canvasObj, jqHeaderText, jqInput);
};

inputOnBlurHandler: function (canvasObj, jqHeaderText, jqInput)
{
    // Hide input textbox 
    jqInput.hide();

    // Store the value in the canvas
    canvasObj.headingText = jqInput.val();

    _layout.updateCanvasControlProperty(canvasObj.instanceid, "Title", canvasObj.headingText, canvasObj.headingText);

    // Show header element
    jqHeaderText.show(); 

    _layout.$propertiesContent.find(".propertyGridEditWrapper").filter(function ()
    {
        return $(this).data("propertyName") === "Title";
    }).find("input[type=text]").val(canvasObj.headingText); // Update the property grid title input element
}
 

Я пытался использовать активный элемент, но я не думаю, что реализация правильная:

 var thisTitle = input0;

var activeElement = $(document.activeElement);

if (thisTitle != activeElement) {
    jqInput.hide();
    _layout.viewHeaderTextInput.inputOnBlurHandler(canvasObj, jqHeaderText, jqInput);
}
 

Мой HTML-код:

 <div class="panel-header-c">
        <div class="panel-header-wrapper">
            <div class="panel-header-text" style="display: none;">(Enter View Title)</div><input class="inline-editable" type="text" style="display: block;"><div class="panel-header-controls">
                <a href="javascript:;" class="collapse-vertical" tabindex="0"><span></span></a>
            </div>
        </div>
</div>
 

введите описание изображения здесь

Я заранее благодарю вас всех.

Комментарии:

1. Что вы подразумеваете под размером ?

2. «Я хотел бы получить ваш вклад с идеей, которая у меня есть» звучит для меня так, как будто этот вопрос должен быть закрыт, потому что он, вероятно, будет генерировать ответы, основанные на мнениях. Кроме того: я думаю, что это ужасная идея, потому что, как вы заявили, есть гораздо более простые и лучшие способы сделать это.

3. @David Я прояснил свой вопрос и то, чего я пытаюсь достичь. Извиняюсь за путаницу

4. @Taplar Я обновил свой вопрос с помощью кода и некоторых методов, которые я пробовал

5. @PM77-1 Извинения. Я новичок в использовании XPath. Я улучшил свой вопрос