2010-12-27 7 views
0
<body> 
<script type="text/javascript"> 
$('#red').click(function(){ 
    $('#write').text('red'); 
}); 

</script> 
<form id="formId" name="formName" method="post"> 
    <table> 
    <tr> 
     <td><div class="clickDiv red" id="red">mmmmmmm</div></td> 
     <td><div class="clickDiv green"></div></td> 
    </tr> 
    </table> 
    <div id="write"></div> 
    <input type="radio" name="satir1" value="red" /> 
    <input type="radio" name="satir1" value="green" /> 
</form> 
</body> 

Это не работает.Простой вопрос jQuery

<body> 
<form id="formId" name="formName" method="post"> 
    <table> 
    <tr> 
     <td><div class="clickDiv red" id="red">mmmmmmm</div></td> 
     <td><div class="clickDiv green"></div></td> 
    </tr> 
    </table> 
    <div id="write"></div> 
    <input type="radio" name="satir1" value="red" /> 
    <input type="radio" name="satir1" value="green" /> 
</form> 

<script type="text/javascript"> 
$('#red').click(function(){ 
    $('#write').text('red'); 
}); 
</script> 
</body> 

Это работает. Зачем? Как я могу использовать часть скрипта в заголовке?

ответ

2

Вам нужно обернуть JavaScript первый пример в в jQuery document ready handler. Это заставит код ждать, пока элементы страницы не будут переданы в DOM javascript до его выполнения.

<script type="text/javascript"> 
$(function() { 
    $('#red').click(function(){ 
     $('#write').text('red'); 
    }); 
}); 
</script> 
0

вы должны использовать опцию HTML(), а не вариант текста

<script type="text/javascript">$(function() { 
$('#red').click(function(){ 
    $('#write').html('red'); 
});});</script> 
+0

Это не повлияет на неэффективность код, который OP видит в первом случае. – jball

+0

jball прав. это не так. но спасибо. Почему я должен предпочесть .html() в .text()? – borayeris

+1

@borayeris: Вы этого не делаете. При установке только текстового содержимого используйте '.text()'. – user113716

1

Используйте .ready с первым фрагментом кода: http://api.jquery.com/ready/

$(document).ready(function() { 
    $('#red').click(function(){ 
     $('#write').text('red'); 
    }); 
}); 

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

+1

Обратите внимание, что '$ (someFunction)' предпочитается над '$ (document) .ready (someFunction)' – jball

+0

Спасибо maaan. Я действительно новичок в работе jQ. – borayeris

+0

Где он говорит, что $ (someFunction) является предпочтительным? Я вижу, что $(). Ready (обработчик) не рекомендуется, но я ничего не вижу о привилегиях $ (someFunction). – keegan3d

1

jQuery, инициирующий перед тем, как дом готов. Вы всегда должны обернуть JQuery в своем заголовке в этом:

$(document).ready(function(){ 
    //Insert jQuery here 
}); 

Для получения дополнительной информации о функции .ready(): http://docs.jquery.com/Tutorials:Introducing_ $ (документ) .ready()

3

В первой версии кода (который Безразлично» t), элемент с id # red по-прежнему недоступен в DOM, поэтому селектор jquery не находит подходящего элемента. Во второй версии элемент доступен.

Однако, как хорошая практика, всегда рекомендуется использовать функцию jquery ready для выполнения любого скрипта, который должен быть запущен, как только DOM будет готов. Он имеет следующие форматы:

$(<YOUR FUNCTION>); 
OR 
$(document).ready(<YOUR FUNCTION>)); 
+0

В чем отличия? – borayeris

+0

AFAIK нет никакой разницы, только одна короткая форма другой. – Chandu

+0

Спасибо Cybernate. – borayeris

1

Оба являются плохими вариантами. Первое не работает, потому что документ не полностью сконструирован в браузере. Попробуйте это:

$(document).ready(function() 
{ 
    $('#red').click(function() 
    { 
     $('#write').text('red'); 
    }); 
});
+1

* «Оба являются плохими параметрами». * Почему второй пример кода плохой? – user113716

+0

Использование функции .ready() запускается после загрузки DOM и до загрузки содержимого страницы. Не использовать функцию .ready() не имеет такой гарантии. – DwB

+1

* «... после загрузки DOM и до загрузки содержимого страницы». * Как это возможно после загрузки DOM, но до содержимого страницы? DOM создается * из * содержимого страницы. Поместив скрипт в закрывающий тег '', он гарантирует, что остальная часть контента будет доступна. – user113716

0

Используйте новую функцию live Jquery вместо и использовать html поставить содержание;)

$('#red').live('click', function(){ 
    $('#write').html('red'); 
}); 

Больше информации: http://api.jquery.com/live/

+1

Bad mojo - использование готового документа очень желательно по производительности, если OP не будет динамически добавлять другие div с 'id =" red "' после загрузки DOM. – jball

+0

@jball: +1 Это пример того, как '.live()' мучительно злоупотребляют. – user113716

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