Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在jQuery中向附加的html字符串添加函数?_Jquery_Function_Append - Fatal编程技术网

如何在jQuery中向附加的html字符串添加函数?

如何在jQuery中向附加的html字符串添加函数?,jquery,function,append,Jquery,Function,Append,我不熟悉jQuery和Web开发。:-) 我想创建一个问题创建页面。它有一个问题文本框和一个添加按钮。 当用户按下添加按钮时,将出现一个新的问题文本框,并在下一行显示一个新的添加按钮。但旧的添加按钮将变成删除按钮并更改其功能 以下是jQuery代码: $(function () { $(".buttonMinus").hide(); $(".buttonPlus").click(function (event) { $(this).remove(

我不熟悉jQuery和Web开发。:-)

我想创建一个问题创建页面。它有一个问题文本框和一个添加按钮。 当用户按下添加按钮时,将出现一个新的问题文本框,并在下一行显示一个新的添加按钮。但旧的添加按钮将变成删除按钮并更改其功能

以下是jQuery代码:

$(function () {
        $(".buttonMinus").hide();

        $(".buttonPlus").click(function (event) {
        $(this).remove(".buttonPlus");
        $(".buttonMinus").show();
        $("#p1").append("<p id='p2'>Question: <input type='text'><button type='button' class='buttonPlus'></button></p>");   **//  Here !!!!**
        alert("Welcome " + $(".ttt").val() + "!");        
    });

    $(".buttonMinus").click(function (event) {
        alert("You have pressed the DELETE button!");
    });
$(函数(){
$(“.buttonMinus”).hide();
$(“.buttonPlus”)。单击(函数(事件){
$(此)。删除(“.buttonPlus”);
$(“.buttonMinus”).show();
$(“#p1”)。附加(

问题:

”);***/这里** 警报(“欢迎”+$(“.ttt”).val()+“!”; }); $(“.buttonMinus”)。单击(函数(事件){ 警报(“您已按下删除按钮!”); });
}))

下面是html代码:

<body>
<div class="demo">
    <p id="p1">Your name: <input type="text" class="ttt"/>
    <button class="buttonPlus" type="button"></button>
    <button class="buttonMinus" type="button"></button></p>
    <br />
</div>      
</body>

您的姓名:


我把所有的加法按钮和减法按钮分为两个不同的类,“.buttonPlus”和“.buttonMinus”。 当主html添加行时,.buttonPlus工作得很好。但是当它被.append()函数添加时,它无法工作。它只是将.buttonPlus的CSS代码添加到它的按钮中,但是$(“.buttonPlus”).click(函数(事件){…}没有附加到新的buttonPlus

你们能告诉我为什么以及如何解决这个问题吗

谢谢, 艾希礼

您可能希望使用这样的函数

$(".buttonPlus").live("click",function (event) {
    $(this).remove(".buttonPlus");
    $(".buttonMinus").show();
    $("#p1").append("<p id='p2'>Question: <input type='text'><button type='button' class='buttonPlus'></button></p>");   **//  Here !!!!**
    alert("Welcome " + $(".ttt").val() + "!");
});

$(".buttonMinus").live("click",function (event) {
    alert("You have pressed the DELETE button!");
});
$(“.buttonPlus”).live(“单击”),函数(事件){
$(此)。删除(“.buttonPlus”);
$(“.buttonMinus”).show();
$(“#p1”)。附加(

问题:

”);***/这里** 警报(“欢迎”+$(“.ttt”).val()+“!”; }); $(“.buttonMinus”).live(“单击”),函数(事件){ 警报(“您已按下删除按钮!”); });

这样做的目的是将相同的事件处理应用于DOM中尚未添加的元素。

创建单击处理程序时,只有页面上当前的元素连接起来。以后添加的元素不会连接起来


您可以在添加这些元素时重新绑定它们,也可以使用jQuery的
.live()
将自动为您执行此操作的功能。

欢迎使用jQuery!这是一个常见问题。此问题是由于新的
.buttonlus
元素在首次将
单击
事件绑定到
.buttonlus
时不存在。第一次绑定
单击
事件时,它将将只绑定到页面上已经存在的元素。这就是为什么将所有代码包装在
$(function())
中的全部原因——它确保在创建所有DOM元素之前不会运行

有几种不同的解决方案。最简单的解决方案是使用jQuery的
.live()
方法,正如Ryan所建议的那样。这将自动将指定的
单击
事件绑定到创建的任何新
.buttonPlus
元素

然而,虽然这是最简单的解决方案,但计算成本也非常高。我在这里不详细介绍,但使用
.live()
绝不是最好的选择。有一种类似的jQuery方法称为
.delegate()
,可以使用它来代替。然而,
.delegate()
.live()
便宜,但它仍然不是您的最佳解决方案

正如迪奥德乌斯所提到的,最好的解决方案是“在添加这些元素时重新绑定它们。”您可以通过以下方式实现:

function btnClickEvent(btn){
    btn.remove(".buttonPlus");
    $(".buttonMinus").show();
    $("#p1").append("<p id='p2'>Question: <input type='text'><button type='button' class='buttonPlus'></button></p>");
    alert("Welcome " + $(".ttt").val() + "!");

    //Re-binding
    var newBtn = $("#p1").find('.buttonPlus:last');
    newBtn.click(function(){
        btnClickEvent(newBtn);
    });
}

$(function(){
    $(".buttonMinus").hide();

    $(".buttonPlus").click(function(){
        btnClickEvent($(this));
    });

    $(".buttonMinus").click(function (event) {
        alert("You have pressed the DELETE button!");
    });
}
功能btnClickEvent(btn){
删除(“.buttonPlus”);
$(“.buttonMinus”).show();
$(“#p1”)。追加(

问题:

”; 警报(“欢迎”+$(“.ttt”).val()+“!”; //重新绑定 var newBtn=$(“#p1”).find('.buttonPlus:last'); newBtn.单击(函数(){ btnClickEvent(newBtn); }); } $(函数(){ $(“.buttonMinus”).hide(); $(“.buttonPlus”)。单击(函数(){ btnClickEvent($(本)); }); $(“.buttonMinus”)。单击(函数(事件){ 警报(“您已按下删除按钮!”); }); }

正如您所看到的,我们所做的只是将运行在
点击
事件上的代码放入一个单独的函数中。这使我们可以轻松地将其绑定到新按钮。您可能也希望对减号按钮执行类似的操作。

回答得很好!给我一个jQuery的大图!谢谢!一旦您开始使用AJAX thi这类事情可能变得特别重要。