2012-08-23 26 views
1

У меня есть код, который читает выделенный текст. Но мне не удается назначить переменную функции в JavaScript. Он не вызывает функцию должным образом, как ожидалось.Назначение переменной функции не работает в JavaScript?

<html> 
<head> 
<script type="text/javascript"> 

function getSelectionText() 
{ 
    var text = ""; 
    if (window.getSelection) 
    { 
     text = window.getSelection().toString(); 
    } 

    return text; 
} 

var txt = getSelectionText(); //<-----This is not working??? 

</script> 
</head> 
<body> 
<p id="p1">Select some of this text then press the button<br /></p> 

<button onclick= document.write(txt) >GetText</button> 
</body> 

</html> 

Если я использую функцию в параметрах записи, она работает.

<button onclick= document.write(getSelectionText()) >GetText</button> 

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

-ScottA

+0

«Это не вызывает функции должным образом» --- то, что делает «правильный вызов "означает? – zerkms

+0

Итак, вы хотите получить выделенный текст перед загрузкой страницы? – Musa

+0

Я хочу получить выделенный текст после загрузки страницы ... Пользователь выбирает текст ... затем нажимает кнопку. – ScottA

ответ

4

Вы вызываете getSelectionText() при загрузке страницы, так что не будет какой-либо текст в то время.

Вам необходимо называть это из обработчика событий.

Дополнительно вы:

  • Используя характеристический атрибут события (which you shouldn't)
  • Не цитирую ваше значение атрибута (который является плохой практикой)
  • Попытки вызвать document.write после загрузки документа (если он находится в закрытом состоянии)
+0

Я не новичок в кодировании. Но я очень новичок в JS, загрузке веб-страниц и обработчиках событий JS button. Если я увижу правильный способ сделать это, это очень поможет мне понять, как работает поток. – ScottA

0

Речь идет не о назначении переменной, о которой идет речь, когда вы вызываете свою функцию.

С вашей рабочей версией getSelectionText() вызывается при нажатии кнопки. В версии, которая не работает, getSelectionText() вызывается, как только загружается тег <script> ... и когда кнопка нажата, результатом этого более раннего вызова является то, что используется.

Поскольку вы хотите, чтобы функция вызывалась при нажатии кнопки, это то, что вам явно нужно делать.

0

Я только что получил ваш код для работы. По большей части. В принципе, я не полагаюсь на переменную txt и использую вашу основную функцию для печати на веб-странице. Почему бы вам не попробовать this и посмотреть, что именно вы хотите улучшить.

0

Ваша линия вар TXT = ... инициализирует глобальную переменную TXT для возвращаемого значения getSelectionTxt()

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

Один из способов затормозить - использовать событие body.onload или функцию. Вы можете установить событие в теге body, например. здесь вызывается некоторая функция вашего в нужное время.

<body onload="initializeMyGlobalsFromDom()"> 

Где initializeMyGlobalsFromDom это функция, которая содержит вашу линию TXT = getSelectionTxt(); // Примечание: опустить уаг ключевое слово для обозначения TXT в качестве глобального

(Вы должны продолжать объявлять «вар TXT;» вне функции, лучшая практика может сказать до ее использования в функции.)

Там также являются способами перехвата событий, не требующих атрибутов в тегах HTML. В глобальном контексте (где у вас есть УАК TXT = ..., теперь), вы можете сделать

window.addEventListener("onload",initializeMyGlobalsFromDom); 

Другой вариант вы имеете присвоить глобальной переменной саму функцию, как в:

var txtFn = getSelectionText; // Функция примечание правопреемником не работает возвращаемое значение

Затем, когда вы используете глобальную переменную, вы должны назвать его:

<button onclick="document.write(txt())">GetText</button> 
+0

О, ничего себе. Это действительно странно по сравнению с тем, что я привык делать на других языках. Но это работает. Большое спасибо! – ScottA

Смежные вопросы