PHP 在输入内单击一次


php onclick once inside input

  <progress value="0" max="100" id="p1"></progress> 
<div class="allQuestion"><?php for($i=1; $i<=10; $i++){?><input type="radio" name="Dq[1]" value="<?=$i?>" onClick='incr();'> <?=$i?> <?php } ?></div>

.js

<script type="text/javascript">
function incr() { 
var v1=document.getElementById('p1').value;
document.getElementById("p1").value= v1 + 1;
}
</script>

的目的是让1-10点之间的问题只能点击一次,但是输入是由PHP生成的,所以如果我把onclick放在输入里面,我点击的每个收音机都会增加进度条,我只需要收音机只点击一次,进度条保持不变, 让每个问题是1%一旦点击它只增加1%,当重新点击它仍然是1%。

或者我也不想使用jQuery。

我不是 100% 确定你在这里问的是什么(从反对票来看,其他人似乎也是)。

在StackOverflow上提问的一些一般提示:

  • 你的问题应该很清楚(很难真正判断你在这里问什么)
  • 理想情况下,您的代码应该以可读的方式呈现(您提供的 PHP/HTML 代码都在一行上,考虑到问题是关于 JavaScript 功能的,而我们无法访问您的其余 PHP 代码,PHP 代码在问题方面毫无用处,并且使回答您的问题更加努力)
  • JSFiddles 在提出这样的前端问题时通常很有帮助(这意味着复制问题所浪费的时间更少)
提问

时尝试遵循上述建议,该列表绝不是包罗万象的,您还应该仔细阅读此处提问的指南。

现在进入您的实际问题。

我猜您希望您的代码按如下方式运行:

  • 一个用户只能选择一个选项一次
  • 选择选项后,应将其添加到段落的数字内容中

假设我上面是正确的(如果没有,请告诉我),以下代码应该适合您:

.HTML:

<p id="answerswerResult">1</p>
<div class="allQuestion" id="allQuestion">
    <input type="radio" name="questionAnswer" value="1" /> 1<br />
    <input type="radio" name="questionAnswer" value="2" /> 2<br />
    <input type="radio" name="questionAnswer" value="3" /> 3<br />
    <input type="radio" name="questionAnswer" value="4" /> 4<br />
    <input type="radio" name="questionAnswer" value="5" /> 5<br />
    <input type="radio" name="questionAnswer" value="6" /> 6<br />
    <input type="radio" name="questionAnswer" value="7" /> 7<br />
    <input type="radio" name="questionAnswer" value="8" /> 8<br />
    <input type="radio" name="questionAnswer" value="9" /> 9<br />
    <input type="radio" name="questionAnswer" value="10" /> 10<br />
</div>

JavaScript:

// the paragraph that contains information about your currently selected answer
var answerSummary = document.getElementById('answerResult');
// the container of the radio buttons
var answersContainer = document.getElementById("allQuestion");
// the radio buttons
var answerOptions = answersContainer.getElementsByTagName("input");
for(var i = 0; i < answerOptions.length; i++) {
    answerOptions[i].addEventListener("click", function(event) {
        // change the paragraph to show the currently selected value
        answerSummary.innerHTML = answerSummary.innerHTML + " " + this.value;
        // disable all radio buttons once an options has been selected
        for(var i = 0; i < answerOptions.length; i++) {
            answerOptions[i].disabled = true;
        }
    });
}

以及指向此代码的链接:http://jsfiddle.net/44mvrftu/4/

我已经相当显着地重构了您的代码,以尝试使其更具可读性,可维护性和易于理解,我已经更改了一些内容:

    更好的变量名称
  • (v1 永远不应该是变量名称)
  • HTML
  • 中没有"onclick",你永远不应该真正这样做,因为这意味着你混合了HTML和JavaScript(表示和功能),这使得可维护性更加困难,并且在某些方面可以说性能较低。如果您发现我添加 onclick 事件处理程序的方式令人困惑,请告诉我,我会尝试帮助您理解,或者您可以修改上面的代码以在 HTML 中使用"onclick"。
  • 删除了PHP(这对于我创建工作演示是必要的)
  • 我使用了纯JavaScript,这将更容易,更干净地在jQuery中实现,并且还可以确保它在较旧的浏览器中工作(上面的代码只能在现代浏览器中可靠地工作),但是您没有说jQuery,所以我假设您没有使用它。

我希望我说得对吗?如果您有任何问题,请告诉我。

问题不清楚,如果你说你只想使用 jQuery .one() 点击一次,请在此处查看详细信息

好吧,

我不知道你想要什么?你可以同时使用PHP和Javascript,但这取决于你想做什么。

jQuery 解决方案:

$("input").one("click", function () {
alert($("input[type=checkbox]").val());
});