Изменение текста кнопки с помощью JavaScript не работает в Opera (11.11) дляэлементы.Зачем? - PullRequest
6 голосов
/ 22 мая 2011

Почему изменение текста кнопки не работает в Opera 11.11 для таких элементов, как

<input type="submit" value="Asdasd" id="blahblah_button" />

? (Еще не пробовал в более ранних версиях.)

Я пробовал это с jQuery и с "чистым" JavaScript, ни один из них не работал
Это код jQuery, который я пробовал:

$('#blahblah_button').val('Blah-blah');

и это "чистый" JS-код:

document.getElementById('blahblah_button').value = 'Blah-blah';

Почему ни один из них не работал в Opera 11.11 ?
Он работает в IE, Chrome и FF , меня удивляет, что он не работает в Opera.

Я должен упомянуть, что он работает и для тегов кнопок, подобных этому в Opera:

<button id="test_button" onclick="$(this).text('Blahblah');">Some text</button> 

Спасибо за ваши ответы заранее!


РЕДАКТИРОВАТЬ I. (0:40)

Я забыл упомянуть, что запрос значения кнопки после модификации дает результат, который, кажется, работает нормально, что означает, что он изменяет структуру в JS DOM, но не перерисовывает видимую кнопку надлежащим образом.

Это пример кода, с которым вы можете попробовать это поведение:

http://jsbin.com/inuxix/1/edit

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="hu" xml:lang="hu">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>Changing button text</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
    </head>
    <body>
        <p>Button tag - WORKING
            <button onclick="$(this).text('Blahblah_1');" id="test_button">Button_text (button_tag)</button>
        </p>
        <p>Input tag (type: submit) - NOT working
            <input onclick="$(this).val('Blahblah_2');" type="submit" value="Submit_text" id="blahblah_submit_type" />
        </p>
        <p>Input tag (type: button) - WORKING
            <input onclick="$(this).val('Blahblah_3');" type="button" value="Button_text" id="blahblah_button_type" />
        </p>
        <p>
            <button onclick="alert($('#blahblah_submit_type').val());" id="val_button">Getting blahblah_submit_type's value</button>
        </p>
    </body>
</html>

РЕДАКТИРОВАТЬ II. (4:41)

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


РЕДАКТИРОВАТЬ III.

Тем временем я проверил его, и он не работает в Opera <= <a href="http://opera-usb.com/download/operausb1111int.zip" rel="nofollow" title="Opera 11.11"> 11.11 , , но эта ошибка была исправлена ​​в Opera 11.50 хотя.

Ответы [ 3 ]

8 голосов
/ 22 мая 2011

Это ошибка в Opera.Я не уверен, что вызывает это, но простая тестовая страница, которая переименовывает кнопку, не вызывает никаких проблем, однако на примере @ Darin's jsfiddle.net ошибка действительно появляется.

Кажется, это ошибка перерисовки,Я заметил, что ширина кнопки изменяется в соответствии с новой меткой, но фактическая метка не меняется.Кроме того, отодвигаясь от страницы и возвращаясь, показывает новый ярлык вместо старого.

Я быстро просмотрел Google и не смог найти никого, кто сталкивался с ним.

Здесьэто обходной путь, который я нашел:

$('#blahblah_button').val('there');
$('#blahblah_button').get(0).outerHTML = $('#blahblah_button').get(0).outerHTML;

Возможно, кто-то может найти более чистый обходной путь, в идеале тот, который встроен в метод jQuery val().Но лучшее решение, очевидно, для Opera, чтобы исправить ошибку.Вы должны отправить им электронное письмо об этом.

6 голосов
/ 22 мая 2011

@ Abhi Beckert, на самом деле какой-то парень нашел эту ошибку - http://webinterfacetricks.com/opera_submit_bug/ Я протестировал ее, и она работает:

<html>
<input type="submit" value="A" id="blahblah" onClick="click_input(this)" />
<script>
    function click_input(input)
    {
        input.value = "test";
        input.type = "submit";
    }
</script>
</html>

Да, это довольно странно, но я надеюсь, что ребята из Opera исправят это.скоро.Можете ли вы сообщить о них, кстати?

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

Я нашел другой способ с js:

document.getElementById('blahblah_button').innerText = "testText";
...