2016-05-15 90 views
0

我试图在不提交表单的情况下操作隐藏字段的值。 我发现的最接近的是Add and Remove values in a hidden field array添加和删除隐藏字段数组中的值,但未提交表单

问题我与此同时它提交表单。在我的项目中,我还没有准备好提交表格。还有更多的问题需要问。 Here's a JSFiddle of my problem

我觉得我错过了像'返回假'的东西。

感谢您的帮助。

jQuery.fn.extend({ 
addToArray: function(value) { 
    return this.filter(":input").val(function(i, v) { 
     var arr = v.split(','); 
     arr.push(value); 
     return arr.join(','); 
    }).end(); 
}, 
removeFromArray: function(value) { 
    return this.filter(":input").val(function(i, v) { 
     return $.grep(v.split(','), function(val) { 
       return val != value; 
       }).join(','); 
    }).end(); 
} 
}); 

回答

0

你可以在onclick代码添加return false;

<button onclick='$("#myField").addToArray("21"); return false;'> 

为了防止提交。

我想你应该问一个单独的问题,但我无论如何都会潜入这个问题。我修改了HTML in the jFiddle。由于您使用的是jQuery,我利用了click事件处理程序。最初,我创建了一个处理程序来查看需要什么代码。它看起来像最初这样:

$("#strength").click(function() { 
    event.preventDefault(); 
    if ($('#goals').val().indexOf(',strength') >= 0) { 
    $('#goals').val($('#goals').val().replace(',strength', '')); 
    $(this).removeClass('button'); 
    $(this).addClass('buttonSelected'); 
    } else { 
    $('#goals').val($('#goals').val() + ',strength'); 
    $(this).removeClass('buttonSelected'); 
    $(this).addClass('button'); 
    } 
}); 

这是一个好的起点找出所需的代码。但是我不想重复每个按钮的代码。所以我将我知道的代码作为其他按钮的代码进行了分解。因此,它是这样的:

$("#strength").click(function() { 
    event.preventDefault(); 
    toggle(',strength', this); 
}); 

function toggle(str, thisObj) { 
    if ($('#goals').val().indexOf(str) >= 0) { 
    console.log(str + ' is already selected'); 
    $('#goals').val($('#goals').val().replace(str, '')); 
    $(thisObj).removeClass('buttonSelected'); 
    $(thisObj).addClass('button'); 
    } else { 
    console.log(str + ' is about to be selected'); 
    $('#goals').val($('#goals').val() + str); 
    $(thisObj).removeClass('button'); 
    $(thisObj).addClass('buttonSelected'); 
    } 
} 

然后,它是非常简单的用一些重复的代码来处理额外的按钮:

$("#weight").click(function() { 
    event.preventDefault(); 
    toggle(',weight', this); 
}); 

$("#tone").click(function() { 
    event.preventDefault(); 
    toggle(',tone', this); 
}); 

您可以减少重复,但我累了饥饿。希望这可以帮助你!

+0

我想也将应用的CSS类更改为按钮。 [New Fiddle](http://jsfiddle.net/FlyingDog/yo49c9ko/) 此前,CSS开关正在工作,但不再是。建议? 我只需要获取数组中选定的值,并反映它们是否未选中,然后从数组中移除。我试着将addToArray的trogger添加到我现有的toggleClass中,但失败了。 – FlyingDog

1

解决方法是防止默认事件。

这里的解决方案:

  event.preventDefault(); 

http://jsfiddle.net/4kbq0veq/

+0

我正在尝试将应用的CSS类更改为按钮。 [New Fiddle](http://jsfiddle.net/FlyingDog/yo49c9ko/) 此前,CSS开关正在工作,但不再是。建议? 我只需要获取数组中选定的值,并反映它们是否未选中,然后从数组中移除。我试着将addToArray的trogger添加到我现有的toggleClass中,但失败了。 – FlyingDog

+0

你可能想为这样的按钮添加单独的监听器:'jQuery(“button”)。click(function(){$(this).toggleClass(“buttonSelected”);});' – Rikin

相关问题