单击按钮和链接时允许值-1,但只允许一次(第一次单击)而不禁用按钮/链接

时间:2011-11-01 14:05:09

标签: javascript jquery

我有以下脚本:

<script language=javascript>
    function process(v){
        var value = parseInt(document.getElementById('v').value);
        value+=v;
        document.getElementById('v').value = value;
    }
</script>


<input type=test size=10 id='v' name='v' value='3'>
<input type=button value='-' onclick='javascript:process(-1)'>
<a id="v" href="#" onclick='javascript:process(-1)'>minus</a>

如果单击该按钮,它将从总金额中扣除1(3)。这同样适用于负链接。现在这一切都很棒。

问题在于我想让每个人只扣一次1。不禁用按钮/链接。

我需要的例子: 所以我点击按钮:3 - &gt; 2。 现在我再次点击按钮,任何事情都不会发生2次停留2。 现在我点击减号链接,2 - &gt; 1。 再次单击该链接,不会发生任何事情1保持1

当然,这可以是混合的。最重要的是,他们每人只允许-1次(第一次点击)。

怎么做?

亲切的问候, 莫里斯

5 个答案:

答案 0 :(得分:1)

首先:您在onclick属性中不需要javascript: - 前缀。

您可以通过点击onclick方法取消所需行为,如下所示,并在此小提琴中:http://jsfiddle.net/XPHLU/1/

<script>
function process(v, elem){
    if(elem && elem.onclick){
        elem.onclick = null;
    }
    var value = parseInt(document.getElementById('v').value);
    value+=v;
    document.getElementById('v').value = value;
}
</script>

<input type=test size=10 id='v' name='v' value='3'>
<input type=button value='-' onclick='process(-1, this);'>
<a id="v" href="#" onclick='process(-1, this)'>minus</a>

答案 1 :(得分:1)

<script language=javascript>
$(document).ready(function(){

    $("#negativeButton, #v").one("click", {arg: -1}, function(event){
//.one() registers a 'click' event, execute it once, and unbind it.  
//stop propagation to the other click events.      
        event.stopImmediatePropagation();
//stop from moving to href="" 
        event.preventDefault();
        process(event.data.arg, this);
    });
//optionally, you can register a .click() after this as well for the same buttons.  .one() will only remove that 'one' click event.

});
    function process(v){
        var value = parseInt(document.getElementById('v').value);
        value+=v;
        document.getElementById('v').value = value;
    }
</script>


<input type=test size=10 id='v' name='v' value='3'>
<input id="negativeButton" type="button" value='-' >
<a id="v" href="#">minus</a>

答案 2 :(得分:1)

由于这个问题是在jQuery下标记的,我为你提供了一个在jQuery中做的方法!从长远来看,使用它可以帮助您获得更清晰的代码并解决此类未来的问题;)

演示:http://jsfiddle.net/NtHwN/4/

<input size=10 id="sum" value="3">
<input class="minus" type=button value="-">
<a class="minus" href="#">minus</a>

$(document).ready(function() {
    $(".minus").one("click", function(){
        var value = parseInt($("#sum").val());
        $("#sum").val(value -1);
    });
});

答案 3 :(得分:0)

<input type=button value='-' onclick='javascript:process(-1)' id="button-to-click">

删除点击处理程序:

   function process(v){
     var value = parseInt(document.getElementById('v').value);
     value+=v;
     document.getElementById('v').value = value;
     document.getElementById('button-to-click').onclick = null;
    }

或多个

<input type=button value='-' onclick='javascript:process(this, -1)'>

删除点击处理程序:

   function process(obj, v){
     var value = parseInt(document.getElementById('v').value);
     value+=v;
     document.getElementById('v').value = value;
     obj.onclick = null;
    }

答案 4 :(得分:0)

嗯......这个应该有效。 JSFiddle是here

HTML(稍加更改):

<input type=test size=10 id='v' name='v' value='3'></input>
<input id="i" type=button value='Minus'></button>
<a id="l" href="javascript://">minus</a>

注意:我不一定建议使用javascript://

JavaScript的:

function appendEvent(id) {
    document.getElementById(id).addEventListener('click', (function() {
        var clicked = false;
        var inputEl = document.getElementById('v');
        return function() {
            if (!clicked) {
                var value = parseInt(inputEl .value);
                inputEl.value = --value;
                clicked = true;
            };
        };
    }()));
}

appendEvent('i');
appendEvent('l');