У меня есть код coffeescript:
$(document).ready ->
setInterval refresh_table, 1000
refresh_table = ->
$.ajax
url: "/ac_units/refresh_table"
format: "js"
type: "POST"
data: { pointer:$('#pointer').data('pointer'), ideal:$('#ideal').val() , current:$('#current').val() }
Этот код работает.
Я хочу добавить функции к этому коду. 1) Я хотел бы увеличить указатель до его отправки на сервер выше 2) Я хотел бы установить обновленное значение указателя на данные div 3) Я бы хотел отправить обновленный указатель на сервер
Я попробовал следующий подход для выполнения вышеуказанных функций:
$(document).ready ->
setInterval refresh_table, 1000
refresh_table = ->
a = $("#pointer").data("pointer")
$("#pointer").data "pointer", a++
$.ajax
url: "/XXX/refresh_table"
format: "js"
type: "POST"
data: { pointer:$('#pointer').data('pointer'), abc:$('#abc').val() , efg:$('#efg').val() }
Но это не сработало. Приращение не происходит. Вот некоторые результаты с моей консоли:
Processing by XXXController#refresh_table as */*
Parameters: {"pointer"=>"0", "abc"=>"73", "efg"=>"79"}
Received params = {"pointer"=>"0", "abc"=>"73", "efg"=>"79", "controller"=>"xxx", "action"=>"refresh_table"}
ptr = 0
Started POST "/XXX/refresh_table" for 127.0.0.1 at 2014-04-04 14:15:44 -0400
Processing by XXXController#refresh_table as */*
Parameters: {"pointer"=>"0", "abc"=>"73", "efg"=>"79"}
Received params = {"pointer"=>"0", "abc"=>"73", "efg"=>"79", "controller"=>"xxx", "action"=>"refresh_table"}
ptr = 0
Что я делаю не так? Почему переменная не увеличивается? Может ли кто-нибудь предложить?
благодаря
Пробовал этот код в ответ на ответ ниже:
$(document).ready ->
setInterval refresh_table, 1000
refresh_table = ->
a = $("#pointer").data("pointer")
x = ++a
$("#pointer").data "pointer", x
$.ajax
url: "/ac_units/refresh_table"
format: "js"
type: "POST"
data: { pointer:x, ideal:$('#ideal').val() , current:$('#current').val() }
Но значение указателя все равно всегда 0
Вы используете a++
. Вам нужно либо ++a
либо просто a + 1
.
a++
оценивает значение a
перед тем, как увеличиваться, так что вы устанавливаете как "новый" атрибут data
.
Просто...
a = 1
x = a++
console.log(a) # 2
console.log(x) # 1
Это сохраняет значение a
(которое равно 1), а затем увеличивает a
на 2, а затем устанавливает x
в сохраненное значение a
, которое равно 1
.
В принципе, ваш код гарантирует, что атрибут data никогда не изменится, потому что он всегда устанавливает pointer
обратно на текущее значение a
до его приращения:
a = $("#pointer").data("pointer")
$("#pointer").data "pointer", a++
Хотя этот код правильно увеличивает атрибут, установив его на значение a
после того, как a
увеличивается.
a = $("#pointer").data("pointer")
$("#pointer").data "pointer", ++a
a = 1; alert(a++)
и вы увидите 1
. Теперь попробуйте a = 1; alert(++a)
и вы увидите 2
. Это довольно просто.
x
, я просто использовал это, чтобы продемонстрировать проблему ...