Как изменить значение кнопки ввода после ее загрузки в DOM с помощью jQuery - PullRequest
1 голос
/ 24 августа 2011

У меня есть эта кнопка telerik с именем класса ruButton & ruBrowse, которая загружается немного позже в DOM. Я пытаюсь изменить значение кнопки на странице загрузки.

Приведенный ниже код не работает при загрузке страницы, но работает, если присоединен к другому событию нажатия кнопки.

$(document).ready(
function(){
$(".ruButton.ruBrowse").attr('value', 'Browse');
}
);

Мой HTML DOM кнопки выглядит следующим образом.

<INPUT class="ruButton ruBrowse" value=Select type=button>

Как мне заставить это работать при загрузке страницы?

Ответы [ 5 ]

0 голосов
/ 25 августа 2011

Значение кнопки загрузки файла Telerik можно изменить с помощью самой поддержки локализации Telerik.Мне пришлось использовать javascript для взлома, прежде чем я узнал об этом.

<telerik:RadUpload ID="RadUpload" runat="server" TargetFolder="..\..\Upload" MaxFileInputsCount="1">
                 <Localization Select="Browse" />
            </telerik:RadUpload>

Locatlization Select = Browse делает работу правильно.Если бы эта опция не была доступна, помогите обойти Javascript.

0 голосов
/ 24 августа 2011

Я только что подумал о другом решении, которое является надежным, даже если вы не знаете, сколько времени потребуется для загрузки кнопок (получается, что таймер в 1 миллисекунду, который сработал для вас, вероятно, был всего лишь предположением),Вам просто нужно запускать таймер снова и снова, чтобы проверить, все ли они загружены, например:

var wait_for_telerik_buttons = function() {
    if ($("input[type='button']").length === $('ruButton.ruBrowse').length) {
        $(".ruButton.ruBrowse").attr('value', 'Browse');
    } else {
        setTimeout(wait_for_telerik_buttons, 100);
    }
};
setTimeout(wait_for_telerik_buttons, 20);

Не могу сказать, что это самый эффективный метод, но если ваше первое предположение хорошо (20 миллисекунд)в приведенном выше примере) тогда он обычно будет ловить его в первый раз.Но есть цикл таймера на 100 мс на случай, если предположение было неверным в любом конкретном случае.Состояние гонки решено.

0 голосов
/ 24 августа 2011

Вы также можете использовать это

$(document).ready( $(".ruButton.ruBrowse").val('Browse'); );

0 голосов
/ 24 августа 2011

Вы писали: «У меня есть эта кнопка telerik с именем класса ruButton & ruBrowse, которая загружается немного позже в DOM».

Если она загружается поздно в dom, единственный верный способ получить доступэто использовать свой собственный обратный вызов.Если он не имеет обратного вызова, вы должны догадаться.Вы можете загрузить его по таймеру следующим образом:

$(document).ready(function() {
    setTimeout(function() {
        $(".ruButton.ruBrowse").attr('value', 'Browse');
    }, 400);
});

[В приведенном выше примере он ждет 400 миллисекунд после загрузки DOM, прежде чем пытаться изменить кнопку].

Вы также можете рассмотретьиспользуя $(window).load(...), чтобы дождаться загрузки не только dom, но и всей страницы.

Но, опять же, гадание действительно глупо, вероятно, будет ошибочным, по крайней мере, в некоторых случаях, и, конечно, недостаточно хорошодля производственно-качественного кода.Если библиотека не предоставляет свой собственный обратный вызов, взломайте библиотеку или используйте другой.

0 голосов
/ 24 августа 2011

Как точно «поздно» он загружается в DOM? И как он загружается?

Это длинный выстрел, и даже если он решит его, это не будет лучшим решением, но:

$(document).ready(function() {
    $(document).change(function() {
        $(".ruButton .ruBrowse").attr('value', 'Browse');
    });
});

EDIT:

Видя, что вы обновили свой вопрос, не могли бы вы попробовать следующее ...

Измените наценку следующим образом:

<input class="ruButton ruBrowse" value="Select" type="button">

Я буду считать, что тип button - вещь Telerik, и оставлю все как есть.

Теперь немного скорректируйте ваш jQuery (я не заметил пробелов между именами классов в селекторе, что может показаться проблемой):

$(document).ready(function() {
   $(".ruButton .ruBrowse").attr('value', 'Browse');
});
...