将变量名称作为id传递

时间:2013-06-18 10:37:12

标签: javascript jquery css html

我使用某个函数在特定类中附加复选框..每次选中复选框时都会运行一个函数..所以我需要获取复选框的名称和ID ..

下面是我动态附加复选框的代码部分..这里是我想要id和name属性的那个..

6 个答案:

答案 0 :(得分:1)

$.each(brandNameg, function(key, value) {

        $(".fpblocks .fpblocksBrands_inner ul").append("<label class='checkbox'><input type='checkbox'  onclick='selectMainBrand(\"" + value + "\");' />" + value + "</label>");

    });

答案 1 :(得分:1)

使用

设置ID
$.each(brandNameg, function(key, value) {
    $(".fpblocks .fpblocksBrands_inner ul").append('<label class="checkbox"><input type="checkbox" id="' + value + '"  onclick="selectMainBrand("' + value + '");" />' + value + '</label>');
});

答案 2 :(得分:0)

function selectMainBrand(ids) {
    $('#Brands').on("change", "input", function () {   
        console.log("called");
        var selected = this.name;
        console.log(selected);
    });
}

我假设你的UL标签有id =“brands”。如果不改变上面的代码如下

    $('.fpblocks').on("change", "input", function () {   

答案 3 :(得分:0)

$.each(brandNameg, function(key, value) {

        $(".fpblocks .fpblocksBrands_inner ul").append("<label class='checkbox'><input type='checkbox' id ='someID' name ='someName' />" + value + "</label>");

    });

并点击复选框点击..

$(".fpblocks .fpblocksBrands_inner ul :checkbox").live('click', function(){
 var id = $(this).attr('id'); //get id of checked checkbox
  var name = $(this).attr('name');   //get name of checked checkbox


})

答案 4 :(得分:0)

  • 从输入代码

  • 中删除onclick='selectMainBrand(value);'
  • 生成复选框后,您可以选择名称和

    $('#Brands input')。on(“change”,function(){
        var name = $(this).attr(“name”);     var id = $(this).attr(“id”);     警报(名);     警报(ID);     的console.log(选择的);
    });

    参见 DEMO http://jsfiddle.net/BbtEG/

答案 5 :(得分:0)

您动态创建的html(<input type='checkbox' onclick='selectMainBrand(value);' />)没有nameid。你无法传递不存在的东西。要解决此问题,请生成要使用的nameid

同样在你的selectMainBrand函数中,你似乎没有使用你传入的ids参数。所有函数正在做的是将处理程序绑定到输入,因为你“使用on绑定它,看起来很傻。

为什么不使用on代理处理程序呢?如果您委派处理程序,则可以从处理程序中抓取nameid,从而无需将这些作为参数传递( working demo )。

$.each(brandNameg, function (key, value) {
    var label = $('<label />').addClass('checkbox'),
        input = $('<input />').attr({
            "type": "checkbox",
            "name": "mainBrand" + key, //set the name, appending the key to make it unique
            "id": "mainBrand" + key //set the id, appending the key to make it unique
        });
    $(".fpblocks .fpblocksBrands_inner ul").append(label.append(input).append(value));
});
//delegate the change handler
$('.fpblocks .fpblocksBrands_inner').on("change", '#Brands input', function (e) {
    var selectedName = this.name,
        selectedId = this.id,
        isChecked = this.checked;
    console.log(JSON.stringify({
        "called": true,
        "selectedName": selectedName,
        "selectedId": selectedId,
        "isChecked": isChecked
    }));
});

如果您确实已经设置了传递参数,那么有一些方法可以做到这一点,例如在创建输入的循环中绑定处理程序( working demo ) :

$.each(brandNameg, function (key, value) {
    var label = $('<label />').addClass('checkbox'),
        input = $('<input />').attr({
            "type": "checkbox",
            "name": "mainBrand" + key, //set the name, appending the key to make it unique
            "id": "mainBrand" + key //set the id, appending the key to make it unique
        }).click(function (e) {
            var self = $(this), // capture the input as a jQuery object (typically very useful)
                actualHandler = function (id, name) {
                    // do stuff
                    console.log(JSON.stringify({
                        "called": "actualHandler",
                        "selectedName": id,
                        "selectedId": name,
                        "isChecked": self.prop('checked')
                    }));
                };
            actualHandler(this.id, this.name);
            // or
            actualHandler(self.attr('id'), self.attr('name'));
        });
    $(".fpblocks .fpblocksBrands_inner ul").append(label.append(input).append(value));
});

或者您可以在创建输入的循环中设置onchange属性( working demo ):

window.inputHandler = function (id, name) { // must be added to the global scope, otherwise it won't be visible.
    // do stuff
    console.log(JSON.stringify({
        "called": "inputHandler",
        "selectedName": id,
        "selectedId": name
    }));
};
$.each(brandNameg, function (key, value) {
    var label = $('<label />').addClass('checkbox'),
        input = $('<input />').attr({
            "type": "checkbox",
            "name": "mainBrand" + key, //set the name, appending the key to make it unique
            "id": "mainBrand" + key, //set the id, appending the key to make it unique
            "onchange": "inputHandler('" + "mainBrand" + key + "', '" + "mainBrand" + key + "')"
        });
    $(".fpblocks .fpblocksBrands_inner ul").append(label.append(input).append(value));
});

还有其他方法可以解决这个问题。

就个人而言,我会使用代表团。