2014-01-09 2 views
1
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery UI Button - Icons</title> 
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 
    <link rel="stylesheet" href="/resources/demos/style.css"> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
    <style> 
     #s 
     { 
      width:200px; 
     } 
     #div1 
     { 
      min-width:100px; 
      width:auto; 
      float:left; 
      border:2px solid black; 
      min-height:100px; 
      height:auto; 
      background-color:red; 
     } 
    </style> 
    <script> 
     $(document).ready(function(){ 
      $("div").click(function(){ 
       $(this).after($('<div id="s" style="background-color:blue;">NLC TRANSPORT</div>')); 
      }); 
      $("#s").click(function(){ 
       alert("sljsdf"); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <div id="div1"> 
     VOLVO B9R 
    </div> 
</body> 
</html> 

Здесь, когда я нажимаю на первый div, программа создает еще один div. вновь созданный div не отвечает на событие click. в текущем коде я указал, что только что созданный div должен дать предупреждение при щелчке, но не работает. Спасибо!jquery onclick новый элемент не создан должным образом

+0

Он не будет связывать событие 'onclick' на вновь созданном' div' –

+0

Mr alien thanx. – user2870746

+0

бармен извините. я не знаю. Я не проверял эту ссылку – user2870746

ответ

2

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

Когда вы используете $('#s').click(....); для регистрации обработчика события, он регистрирует дескриптор только тех элементов, которые уже присутствуют в dom во время выполнения кода, в вашем случае, так как эти элементы создаются после этого, обработчики будут не привязываться к вновь созданным элементам

Попробуйте

$(document).ready(function(){ 
$(document).on('click',"div",function(){ 
    $(this).after($('<div id="s" style="background-color:blue;">NLC TRANSPORT</div>')); 
}); 
$(document).on("click", "#s", function(){ 
    alert("sljsdf"); 
}); 
}); 

DEMO

+0

спасибо за помощь. демо и теория. Я изучаю jquery самостоятельно. так что это немного отличается от меня .. thanx – user2870746

+0

@ user2870746, если это помогает повысить его и принять как ответ –

2

Вам нужно degation событий для динамически добавляемых элементов. Время связывания коды для элемента с идентификатором х выполняется элемент не существует в DOM

$(document).on("click", "#s", function(){ 
    alert("sljsdf"); 
}); 

делегированы событиях

делегированных событие имеет то преимущество, что они могут обрабатывать событие от узлов которые будут добавлены в документ позже. К выбор элемента, который гарантированно присутствует в момент присоединения делегированного обработчика , вы можете использовать делегированные события , чтобы избежать необходимости часто прикреплять и удалять обработчики событий, jQuery doc.

+0

Это то, что мне нужно. thanx !! :) – user2870746

+0

Добро пожаловать @ user2870746 – Adil

2

Когда выполняется ваш обработчик dom, в dom нет div div, поэтому обработчик клика не будет добавлен к элементу.Вы можете использовать event delegation, чтобы исправить эту проблему

$(document).on('click', "#s", function() { 
    alert("sljsdf"); 
}); 

Демо: Fiddle

+0

Благодарим вас за демонстрацию. :) – user2870746

0

Вы не можете добавить событие обработчик элемента, который не является IST еще:

$(document).ready(function() { 
    $("div").click(function() { 
     $(this).after($('<div id="s" style="background-color:blue;">NLC TRANSPORT</div>')); 
     $("#s").click(function() { 
      alert("sljsdf"); 
     }); 
    }); 
}); 
0

Попробуйте этот код:

$(document).ready(function(){ 
$("#div1").click(function(e){ 
    $(this).after($('<div id="s" style="background-color:blue;">NLC TRANSPORT</div>')); 
    $("#s").click(function(){ 
     alert("sljsdf"); 
     }); 

    }); 

}); 
1

Пожалуйста, ознакомьтесь LINK

ИЛИ

Попробуйте ниже код ...

Ваш HTML ....

<div id="div1"> VOLVO B9R </div> 

Ваш JQuery код ....

$(document).ready(function() {  
    $("div").click(function() {  

     $(this).after($('<div id="s" style="background-color:blue;">NLC TRANSPORT</div>'));  

     $("#s").bind('click', function() { 
      alert("sljsdf"); 
     }); 
    }); 
}); 

Ваш CSS ....

#s 
{ 
width:200px; 
float:right; 
} 
#div1 
{ 
min-width:100px; 
width:auto; 
float:left; 
border:2px solid black; 
min-height:100px; 
height:auto; 
background-color:red; 
} 
1

Следующие JQuery строк кода поможет вы ..

$(document).ready(function(){ 
    $('body').on('click','#div1',function(){ 
     $(this).after($('<div id="s" style="background-color:blue;">NLC TRANSPORT</div>')); 
     $('#s').click(function(){ 
     alert('a'); 
     }) 
    }) 
}); 
1

Используйте приведенный ниже код ..

$(document).ready(function() { 
     $("div").click(function() { 
      $(this).after($('<div id="s" style="background-color:blue; clear:both">NLC TRANSPORT</div>')); 
      $("#s").bind("click", function() { 
       alert("sljsdf"); 
      }); 
     }); 

    }); 

Удачи.

+0

thanx !!! :) Это отлично работает! – user2870746

+0

Больше всего приветствую .. :) –

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