jQuery не может «подключиться» к элементам на моей веб-странице, созданной сервером

Я пытаюсь использовать функциональность jQuery в IDE Software AG webMethods, которая генерирует страницы самостоятельно. По сути, я даю функциям jQuery идентификатор элемента, сгенерированный сервером, но jQuery не может прочитать его значение или записать значение к нему, или сделать что-нибудь с ним ..

Вот код, который я использую:

if(jQuery.isNumeric(jQuery(CAF.model("#{activePageBean.clientIds['txtInput']}").id).val()))
{
alert("its a number");
}
else
{
alert("its not a number");
}

txtInput - это обычное текстовое поле ввода, а приведенный выше код назначается кнопке ... И независимо от того, что вводится в текстовое поле, я всегда получаю предупреждение «это не число».

Кроме того, если я использую этот код вместо ..

alert(jQuery(CAF.model("#{activePageBean.clientIds['txtInput']}").id).val());

... Я всегда получаю предупреждение о том, что "не определено" (без двойных кавычек)..

Выражение, возвращающее идентификатор текстового поля:

CAF.model("#{activePageBean.clientIds['txtInput']}").id

.. а это:

jsfwmp147312:defaultForm:txtInput

Если вместо этого я запущу эту встроенную функцию webMethods, чтобы получить значение:

CAF.model("#{activePageBean.clientIds['txtInput']}").getValue();

Он возвращает значение, которое в настоящее время находится в текстовом поле.

Таким образом, по какой-то причине функции jQuery не могут «соединиться» с элементами страницы.

Как это диагностировать/решить?

ИЗМЕНИТЬ:

Дополнительная информация:

Если я попробую следующий код...

var myId = "jsfwmp147312:defaultForm:txtInput";
var element = document.getElementById(myId);
alert(element.value + "");

.. Я получаю строковое значение строкового текстового поля в предупреждении в порядке, без проблем... Но если я попробую это...

var myId = "jsfwmp147312:defaultForm:txtInput";
var val2 = jQuery(myId).val();
alert(val2);

... Я получаю предупреждение с сообщением "undefined" (без двойных кавычек)..


person Ahmad    schedule 09.03.2012    source источник


Ответы (2)


Нам понадобится HTML с этим. Я не очень понимаю ваш селектор. Вы говорите, что он «назначен кнопке», поэтому вам понадобится click.

jQuery(document).on("click", "#clientIds[name=txtInput]", function(){

    v = $(this).val();
    alert(v);

});

В целом код на стороне клиента и код на стороне сервера не взаимодействуют. Код на стороне сервера выдает HTML, а код на стороне клиента обрабатывает его позже. Чтобы оба могли общаться, вам необходимо отправить данные, например, через запросы страницы или AJAX.

person Richard    schedule 09.03.2012

Проблема в том, что означает что-то в селекторе jQuery, поэтому он не ищет что-то еще.

Строка должна выглядеть как jsfwmp147312\:defaultForm\:txtInput

Таким образом, вам нужно будет заставить его работать в два этапа.

var myId = CAF.model("#{activePageBean.clientIds['txtInput']}").id.replace(/:/g,"\\:");
var val = jQuery(myId).val();

if (jQuery.isNumeric( val ) {
    alert("its a number");
} else {
    alert("its not a number");
}
person epascarello    schedule 09.03.2012
comment
Ваш код, кажется, движется в правильном направлении, но условие if по-прежнему не выполняется. Если я сделаю var myId = CAF.model("#{activePageBean.clientIds['txtDateInput']}").id.replace(/:/,"\\:");, а затем alert(myId);, я получу предупреждение о том, что jsfwmp147312\:defaultForm:txtInput... Можете ли вы точно сказать мне, какое значение нужно jQuery, чтобы я мог соответственно добавить/вычесть строку? .. - person Ahmad; 09.03.2012