Jquery / Javascript onchange.replace()函数杀了我

时间:2014-02-28 00:26:06

标签: javascript jquery onchange

你好&感谢您寻找

我有一个可编辑的Jquery表,当从最后一行跳出标签时会自动创建一个新行。该脚本复制了上一行,但更改了name和id字段中的行号。

newName 工作和更新很棒;

newId 工作和更新很棒;

我在一个重复的选择框的 onchange 属性中尝试相同的事情:

希望改变:

    <select name="det[5][item]" onchange="getitemprice(this.value,5);">

    <select name="det[6][item]" onchange="getitemprice(this.value,6);">

但是当我添加这行时Javascript一直在破碎:

    newOne      = elem.onchange.replace(/[0-9]+/i, config.formPos );

进入下面的addRow()函数!

    function addRow() {
        var tr = $(table).find('tr:not(.noedit):first').clone();
        //console.dir(tr);
        addFormPos();
        if($(tr).find("input, select, textarea").length > 0) {
            $(tr).find("input, textarea, select").each(function(index, elem) {
                // Change the name of the fields
                var newName = '';
                var newId = '';
                var newOne = '';
                if(config.formPos !== '') {
                    newName     = elem.name.replace(/\[[0-9]+\]/i, '[' + config.formPos + ']');
                    newId       = elem.id.replace(/[0-9]+/i, config.formPos );
                    newOne      = elem.onchange.replace(/[0-9]+/i, config.formPos );
                }else {
                    newName = elem.name;
                }

                if(elem.type == 'checkbox' || elem.type == 'radio') {
                     $(elem).attr({'name': newName, 'checked': false})
                }else {
                     $(elem).attr({'name': newName, 'id': newId, 'onchange': newOne});
                }
                $(elem)
            });
            $(tr).find("input:radio, input:checkbox").attr('checked', false);
        }

我缺少什么?我怎样才能像newId和newName元素一样简单? 感谢大家的帮助,我相信你会觉得这很荒谬。

-Nic -

2 个答案:

答案 0 :(得分:0)

不要使用内联事件处理程序使用像

这样的jQuery处理程序
<select name="det[6][item]" class="myselect" data-formpos="5"> 

然后

jQuery(function($){
   $(document).on('change', '.myselect', function(){
       var value = this.value, formPos = $(this).data('formpos');
       //your code
   })
})

然后创建

elem.data('formpos', config.formPos );

如果您仍想使用内联处理程序,请尝试

$(elem).attr('onchange', 'getitemprice(this.value, ' + config.formPos + ');');

答案 1 :(得分:0)

我最终做了:

    if($(elem).attr('onchange')){elem.setAttribute("onchange", 'getitemprice(this.value,' + config.formPos + ');');};

它允许我只搜索具有onchange事件的一个表单输入,任何onchange事件,并使用javascript设置它。无法弄清楚如何使用JQuery,因为每次我做

    $(elem).attr('onchange',...

它会破坏javascript。我知道它不优雅,但我能让它发挥作用的唯一方法。 -Me -