2012-06-12 5 views
0

Я пытаюсь изменить JQuery содержание тегов div так, чтобы оно выглядело так, как будто пользователь проходит через несколько страниц. У меня есть то, что пользователь нажмет кнопку, как только они нажмут кнопку, скрипт запустится и изменит содержимое div. Я хотел иметь как минимум три страницы, чтобы сделать это, но я столкнулся с проблемой после второй страницы. Вот что у меня есть в сценарии:JQuery Изменение содержимого

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 

$(document).ready(function() { 

$("#1").click(function() { 
$("#leftPart").html('<input type="text" id="blash" value="blash" name="blash" ><input type="text" id="hello" value="hello" name="hello" ><input type="text" id="world" value="world" name="world" ><input type="button" name="submit" id="2" value="Submit" />'); 
$("#rightPart").html(''); 
}); 

$("#2").click(function() { 
$("#rightPart").html('<input type="text" id="meep" value="meep" name="meep" ><input type="text" id="glomp" value="glomp" name="glomp" >'); 
}); 
}); 

Поэтому, как только я нажимаю на кнопку на первой странице, с идентификатором «1», то он изменяет экран на то, что вторая страница должна показать. Вторая страница отобразит некоторые вещи и создаст еще одну кнопку с идентификатором «2». Когда я пытаюсь щелкнуть по кнопке со второй страницы с идентификатором «2», она ничего не делает. Любая помощь? Это потому, что кнопка создается с помощью скрипта вместо фактического нахождения в html?

+2

В HTML не указывается числовой идентификатор, вы должны изменить их, например.to 'page1'. – iappwebdev

+1

@Simon: HTML5 делает, и большинство браузеров могут справиться с этим. Тем не менее, это уродливо как-то;) –

+0

Хорошо, плохой комментарий. Здесь снова: W3C Стандартное соглашение HTML не позволяет: http://www.w3.org/TR/html4/types.html#type-name – iappwebdev

ответ

2

Это потому, что кнопка с id = "2" сделана после привязки к событию клика, эта новая кнопка не является det если вы повторно привязываете событие click. Лучшим вариантом было бы использовать on() вместо click(), это сделает это автоматически.

$(document).ready(function() { 

    $("#1").on('click', function() { 
     $("#leftPart").html('<input type="text" id="blash" value="blash" name="blash" ><input type="text" id="hello" value="hello" name="hello" ><input type="text" id="world" value="world" name="world" ><input type="button" name="submit" id="2" value="Submit" />'); 
     $("#rightPart").html(''); 
    }); 

    $("#2").on('click', function() { 
     $("#rightPart").html('<input type="text" id="meep" value="meep" name="meep" ><input type="text" id="glomp" value="glomp" name="glomp" >'); 
    }); 

}); 
+0

Это '$ (" # 2 "). on (function()' синтаксис '.on' не работает для будущих элементов, это точно так же, как' .click'. Синтаксис: '$ (Static_parent) .on (событие, селектор, обратный вызов);'. –

+0

Работает отлично, насколько я знаю, мы всегда используем его так: – Viezevingertjes

+0

Извините, он будет работать для этого случая как ' 2' добавляется перед вызовом. Но не будет работать для динамически добавленных элементов, в этом случае вам нужно использовать '$ (document) .on ('click', "# 2", function() 'синтаксис. –

0

Да. Это связано с тем, что кнопка «2» отсутствует в DOM во время присоединения события к веб-странице.

Попробуйте использовать

Вы также можете обратиться 'Event binding on dynamically created elements?' больше.

+0

.live устарел, поэтому вы должны использовать его –

+0

Это устарело, поэтому вам «ДОЛЖНО» использовать его? Там есть опечатка? – Playmaker

+0

Да, я забыл, что не должен (и здесь я имею в виду, должен) сказал, что не должен его использовать (потому что он устарел) –

0

Вы правы, потому что он создан динамически. вы можете использовать .on, чтобы избежать этой проблемы

изменения вам код:

$("#2").click(function() { 
$("#rightPart").html('<input type="text" id="meep" value="meep" name="meep" ><input type="text" id="glomp" value="glomp" name="glomp" >'); 
}); 
}); 

к

$("#leftPart").on("click","#2",function() { 
    $("#rightPart").html('<input type="text" id="meep" value="meep" name="meep" ><input   type="text" id="glomp" value="glomp" name="glomp" >'); 
}); 

, что будет гарантировать, что любой элемент leftPart с идентификатором 2 в настоящее время и в будущем будет иметь вышеупомянутый обработчик событий

+0

Синтаксис '.on' неверен. –

+0

@Joy Что значит? Я не писал '$ .on' в любом месте –

+0

Я имел в виду ваш предыдущий синтаксис' $ ("# leftPart"). On ("# 2", "click", function() 'было неверно. фиксированный синтаксис. –

1

Это потому, что вы создаете кнопку динамически. Чтобы делегировать событие click, вам необходимо использовать .on(). Кнопка #2 не создается, когда dom готов, и поэтому она не работает. «body» может быть заменен любым родительским элементом выбранной кнопки. Кроме того, вы не должны использовать число в качестве идентификаторов, поскольку они не являются действительным

$('body').on('click','#2',function(){ 
1

изменить это

$("#2").click(function() { 
    $("#rightPart").html('<input type="text" id="meep" value="meep" name="meep" ><input type="text" id="glomp" value="glomp" name="glomp" >'); 
}); 

к

$(document).on('click',"#2",function() { 
    $("#rightPart").html('<input type="text" id="meep" value="meep" name="meep" ><input type="text" id="glomp" value="glomp" name="glomp" >'); 
}); 

Числовых значения не являются допустимыми идентификаторами, использовать действительный идентификатор ,

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