захват апекса: commandButton с использованием jQuery - PullRequest
1 голос
/ 24 марта 2012

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

В моем источнике моя кнопка сохранения выглядит так:

<apex:commandButton id="saveButton" value="Save"/>

А в моем документе уже есть это заявление:

alert('button value ' + $("[id$=saveButton]").value);

Но все, что я получаю при загрузке страницы:

«Значение кнопки не определено».

В конце концов я хочу программно отключить кнопку из функции JavaScript, но я не думаю, что смогу даже захватить элемент.

Инспектор Chrome говорит, что мой элемент выглядит так:

<input id="j_id0:frm:searchBlock:saveButton" type="submit" name="j_id0:frm:searchBlock:saveButton" value="Save" onclick="saveButtonClicked();" class="btn" disabled="disabled">

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 24 марта 2012

При использовании jQuery используйте $("selector").val();, а не $("selector").value;. $("selector").value; будет неопределенным.

В вашем случае используйте: $("[id$=saveButton]").val();.

К отключить :

$("[id$=saveButton]")
    .attr("disabled", "disabled")
    .removeClass("btn")
    .addClass("btnDisabled");

К включить заново :

$("[id$=saveButton]")
    .removeAttr("disabled")
    .removeClass("btnDisabled")
    .addClass("btn");
1 голос
/ 24 марта 2012

Мика, ваша основная проблема в том, что вы используете .value с объектом jQuery - это возвращает неопределенное значение, потому что .value не является свойством объектов jQuery.Используйте .val ().

Ваш метод выбора «заканчивается» работает нормально, и на сегодняшний день это самый простой способ последовательного извлечения элементов Visualforce по Id - так что ничего не меняйте здесь.

Кстати, если вы пытаетесь манипулировать этой кнопкой из JavaScript, я бы посоветовал не использовать CommandButton.Все, что вы можете достичь с помощью CommandButton, вы можете сделать с помощью обычной кнопки ввода, например, и тогда вам не нужно беспокоиться о (1) путанице со стандартными элементами Visualforce, которые часто заключаются в несколько слоев DIV (2)Проблемы с повторным рендерингом.Например, если вы хотите создать некоторый JavaScript-код перед вызовом действия Apex (как стандартного, так и пользовательского) и по-прежнему отображать «командную кнопку» на страницеBlockButtons, сделайте следующее:

<apex:pageBlockButtons>
    <input type="button" class="btn" id="mySaveButton" 
        onclick="saveButtonClicked();" value="Save"/>
</apex:pageBlockButtons>

Этобудет отображать кнопку, которая выглядит ТОЛЬКО как CommandButton, плюс вы можете легко получить доступ / отключить ее в jQuery:

<script>
var $j = jQuery.noConflict();

// To disable the button programmatically
// (in jQuery 1.7+) on page load:
$j(document).ready(function(){
    $j('#mySaveButton').prop('disabled',true);
});
</script>
0 голосов
/ 24 марта 2012
alert('button value ' + $("#j_id0\\:frm\\:searchBlock\\:saveButton").val());

Для отключения:

$("#j_id0\\:frm\\:searchBlock\\:saveButton").attr("disabled", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...