0

我对js不是很好,但基本上我有一个按钮

<%=button_to_function "✓", checkButton(), :class => "buttonGrey"%>

那就是调用我做的一个js函数。但是,我的函数语法出现错误。

function checkButton()
{
if (this.className="buttonGrey") {
    this.removeClass('buttonGrey');
    this.addClass('buttonGreen');
}

if (this.className="buttonGreen") {
   this.removeClass('buttonGreen');
   this.addClass('buttonGrey');
}
}
4

5 回答 5

1

用于==比较strings而不是=
您的按钮将始终是buttonGrey,因为如果它在第一个if语句中更改,它将在第二个语句中再次更改,因为它不在else语句中。
您也可以使用toggleClass切换类。

function checkButton() {
    $(this).toggleClass("buttonGrey buttonGreen");
}
于 2012-11-08T19:35:10.420 回答
1

如果您有一个带有“buttonID”的按钮,那么您可以像这样更改类..

$("#buttonID").removeClass("buttonGrey").addClass("buttonGreen");

或者使用jquery的切换功能

$("#buttonID").click(function () {
      $(this).toggleClass("buttonGrey buttonGreen");
    });
于 2012-11-08T19:38:35.293 回答
1

I don't know much about Ruby/Rails, but the ideal solution would be to separate the HTML markup from the JavaScript. While you can still use the "onClick" event on the HTML element, it is generally a good practice to give the element an ID and/or Name and then allow JavasScript to bind to that element.

Here is a rough markup of using an ID value:

<%=button_to_function "✓", :class => "buttonGrey" :id => "myButton"%>

Then in your checkButton() method, update the calls to:

function checkButton()
{
if ($("#myButton").className=="buttonGrey") {
    $("#myButton").removeClass('buttonGrey');
    $("#myButton").addClass('buttonGreen');
}

if ($("#myButton").className=="buttonGreen") {
   $("#myButton").removeClass('buttonGreen');
   $("#myButton").addClass('buttonGrey');
}
}

Hope that helps, or at least steers you in the right direction :)

于 2012-11-08T20:07:14.630 回答
0

上述答案部分正确。为了比较,您应该使用=====最好在适当的时候使用)。

但是,在上面的代码中,this不会是您所期望的。在您的情况下,它很可能是全局window对象。您必须使用函数传递输入的引用,如下所示:

<%=button_to_function "✓", checkButton(this), :class => "buttonGrey"%>

function checkButton(in)
{
 if (in.className === "buttonGrey") {
    $(in).removeClass("buttonGrey");
    $(in).addClass("buttonGreen");
 }

 if (in.className === "buttonGreen") {
   $(in).removeClass('buttonGreen');
   $(in).addClass('buttonGrey');
 }
}
于 2012-11-08T19:41:49.583 回答
0

嗨,问题是您在 if 语句中使用了赋值运算符

我不确定您尝试做什么:

当我编写这样的事件处理程序时,我会这样写:

$('#mybutton').click(function(){
  if ($(this).attr('class') === "buttonGreen") {
     $(this).removeClass('buttonGreen');
     $(this).addClass('buttonGrey');
  }
});

要从 asp.net 实际获取按钮 ID,请使用以下代码:

$('#<%=btnMyButton.ClientID %>').click(function().....

祝你好运 ; )

于 2012-11-08T19:48:14.043 回答