【问题标题】:jQuery add another function to AJAX call or CSS solution?jQuery 向 AJAX 调用或 CSS 解决方案添加另一个功能?
【发布时间】:2015-10-19 21:46:23
【问题描述】:

我在 PHP 文件中有一个 AJAX 调用,它替换了 div 的内容,具体取决于单击的按钮。它工作得很好。现在我有了该功能,我想在单击按钮时将按钮的背景颜色从灰色更改为绿色,并使其保持绿色直到单击另一个按钮,然后将其变为绿色。

这是 AJAX 的 javascript:

<script language="JavaScript">
function ChangeContent1()
{
  $("#table_area_dripPSZ1").load("zone1PS.php");
}
function ChangeContent2()
{
  $("#table_area_dripPSZ1").load("zone2PS.php");
}
function ChangeContent3()
{
  $("#table_area_dripPSZ1").load("zone3PS.php");
}
</script> 

这是其中一个按钮的 HTML:

<button
    type="button"
    name="z3"
    onclick="ChangeContent3()">
    Zone 3
</button>

这是我用于将按钮更改为绿色的 CSS:

button:active {
background-color: #3DAE48;
}

button:focus {
background-color: #3DAE48;
}

button:focus:active {
background-color: #3DAE48;
}

问题是上面的代码在 PC 上的浏览​​器中运行良好,但只能在 Mac 上的 Chrome 中运行。对于 Mac 上的 Safari 和 Firefox,以及 IOS 中的所有浏览器,它都不起作用。我还没能在 IE 中测试它。

看来解决办法是用jQuery在onClick事件中添加另一个函数。我在 stackoverflow 上找到了一些可行的 jQuery 代码,但不知道如何或在哪里插入它。我已经尝试了几乎所有我能想到的组合。

我精通 PHP、HTML 和 CSS,但在 JavaScript 和 AJAX 方面完全是新手。让 AJAX 工作对我来说是一项壮举。但是,将按钮变为绿色并使其保持绿色直到单击另一个按钮确实让我感到头晕目眩。非常感谢您在此提供帮助。

【问题讨论】:

  • 你应该在你的按钮上去掉像onclick="ChangeContent3()"这样的内联javascript处理程序,而是使用javascript来附加一个处理程序到元素(按钮)。由于您已经在使用 jQuery,所以它超级简单。然后将你所有的 javascript 移动到它自己的 .js 文件中,这样它就不会与你的 php 混在一起。
  • fiddle 展示了 John Svensson 的答案,还表明 HTML/PHP、Javascript 和 CSS 是分开的。
  • 很棒的输入,@StephenP!非常感谢你这样做。我可以看到这是对代码的最有效使用。它会很好地为我服务。

标签: javascript php jquery css ajax


【解决方案1】:

一种解决方案是将按钮绑定到单击事件并添加一个设置background-color的类

$('button').click(function () {
   $('button').removeClass('btn-active');
   $(this).addClass('btn-active'); 
});

首先我们从所有按钮中删除类btn-active,然后将类添加到我们单击的按钮中。 如果您的页面上有多个按钮,则应该具有这种行为,您可能应该在这些按钮上添加一个类,并更改该事件仅侦听具有该类的那些按钮。

【讨论】:

  • 我对此有一个疑问: 1. 我将这段代码放在文件的什么位置?我不确定是将它放在头部、按钮之前的正文中,还是放在结束正文标记之前的文件末尾。
  • 在正文结束标签之前通常是最好的位置。确保将代码包装在 $(document).ready(function () { // Code here }); 中,以确保 DOM 已准备好进行操作。
  • 谢谢你,@John。这也完全有效。我会把它藏起来以备将来在这个项目中使用。我已经将另一个答案标记为正确答案,所以我赞成你的。再次感谢您。
  • 这实际上是最好的解决方案,因为其他解决方案使按钮保持绿色,即使单击其他按钮也是如此。因为我没有在我的问题中要求这个,所以我不会告诉其他人他的答案是错误的。两个答案都是正确的,但你的答案更符合我的需要。
  • 很高兴它有帮助!一般来说,您应该尽量避免使用内联脚本,并将它们放在文档末尾的合理位置,这样可以确保最后加载脚本,还可以通过在文档中放置代码。准备好确保 DOM 已准备好进行操作.
【解决方案2】:

不用CSS,直接替换

<button
    type="button"
    name="z3"
    onclick="ChangeContent3()">
    Zone 3
</button>

<button
    type="button"
    name="z3"
    onclick="$(this).css('background-color','#3DAE48'); ChangeContent3();">
    Zone 3
</button>

这样,您将使用 jQuery 更改按钮的背景颜色

【讨论】:

  • 对不起。不太明白你的答案。
  • 这似乎是一个很好的解决方案,但它让我的 PHP 完全失控了。我收到以下错误:PHP Parse error: syntax error, unexpected 'background' (T_STRING)
  • 将我的答案中的 ' 替换为 \' @Lori
  • 行得通!非常感谢你,@Luis!我真的很感激!
  • 如果您单击另一个按钮,您之前单击的另一个按钮仍然是绿色的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多