JQuery Get () PHP кнопку Отправить - PullRequest
0 голосов
/ 03 августа 2011

У меня есть следующий код jquery

$(document).ready(function() {
//Default Action
$("#playerList").verticaltabs({speed: 500,slideShow: false,activeIndex: <?=$tab;?>});
$("#responsecontainer").load("testing.php?chat=1");
var refreshId = setInterval(function() {
  $("#responsecontainer").load('testing.php?chat=1');
}, 9000);
$("#responsecontainer2").load("testing.php?console=1");
var refreshId = setInterval(function() {
  $("#responsecontainer2").load('testing.php?console=1');
}, 9000);

$('#chat_btn').click(function(event) { 
  event.preventDefault();
  var say = jQuery('input[name="say"]').val()
 if (say) { 
  jQuery.get('testing.php?action=chatsay', { say_input: say} );
  jQuery('input[name="say"]').attr('value','')
} else {
  alert('Please enter some text');
}
});

$('#console_btn').click(function(event) { 
event.preventDefault();
var sayc = jQuery('input[name="sayc"]').val()
if (sayc) { 
  jQuery.get('testing.php?action=consolesay', { sayc_input: sayc} );
  jQuery('input[name="sayc"]').attr('value','')
} else {
  alert('Please enter some text');
}
});


$('#kick_btn').click(function(event) { 
event.preventDefault();
var player_name = jQuery('input[name="player"]').val()
if (player_name) { 
  jQuery.get('testing.php?action=kick', { player_input: player_name} );
} else {
  alert('Please enter some text');
}
});


});

Образец формы

      <form id=\"kick_player\" action=\"\">
    <input type=\"hidden\" name=\"player\" value=\"$pdata[name]\">
    <input type=\"submit\" id=\"kick_btn\" value=\"Kick Player\"></form>

И код обработчика

if ($_GET['action'] == 'chatsay') {
$name = USERNAME;
$chatsay = array($_GET['say_input'],$name);
$api->call("broadcastWithName",$chatsay);
die("type: ".$_GET['type']." ".$_GET['say_input']);
}

if ($_GET['action'] == 'consolesay') {
$consolesay = "§4[§f*§4]Broadcast: §f".$_GET['sayc_input'];
$say = array($consolesay);
$api->call("broadcast",$say);
die("type: ".$_GET['type']." ".$_GET['sayc_input']);
}
if ($_GET['action'] == 'kick') {
 $kick = "kick ".$_GET['player_input'];
 $kickarray = array($kick);
 $api->call("runConsoleCommand", $kickarray);
 die("type: ".$_GET['type']." ".$_GET['player_input']);
}

Когда я нажимаю кнопку, она перезагружает страницу для начала и не должна этого делать, она также не обрабатывает код моего обработчика. Я возился с этим вот уже несколько часов, и я уверен, что это глупость.

Я пытаюсь сделать так, чтобы одна кнопка (0 видимых полей формы) запускала событие. Если мне нужно иметь их в отдельном файле, я могу, но для простоты у меня все это в одном файле. Команда die, чтобы остановить загрузку остальной части файла. Что я мог упускать из виду?

Я добавил больше кода ... все коды chat_btn и console_btn работают, и этот удар устанавливается одинаково (с использованием скрытого поля, а не текстового поля). Я не могу определить, что не так, почему это не работает: (

Ответы [ 3 ]

2 голосов
/ 03 августа 2011

используйте возвращаемое ложное событие. Вместо protectDefault поместите его в конец функции

т.

$(btn).click(function(event){
    //code
    return false;
});

И вам, вероятно, следует использовать json_decode в вашем php, поскольку вы передаете json в скрипт php, таким образом, это будет массив.

1 голос
/ 03 августа 2011

Либо ваш обратный вызов вообще не вызывается, либо условие if вызывает ошибку. Если бы он достиг какой-либо ветви if, он не перезагрузил бы страницу, поскольку обе ветви начинаются с event.prevntDefault().

Если вы не видите никаких ошибок в консоли, вполне вероятно, что обратный вызов вообще не связан. Используете ли вы jQuery(document).ready( ... ) для привязки ваших обработчиков событий после DOM доступен для манипулирования?

Некоторые примечания по стилю:

  • Если обе ветви if содержат одинаковый код, уберите этот код из оператора if:
  • для элементов формы используйте .val() вместо .attr('value')
  • не проверяйте против "", если вы действительно хотите проверить правдивость, просто проверьте значение:

jQuery(document).ready(function () {
  jQuery('#kick_btn').click(function(event) { 
    event.preventDefault();
    var player_name = jQuery('input[name="player"]').val()
    if (player_name) { 
      jQuery.get('testing.php?action=kick', { player_input: player_name} );
    } else {
      alert('Please enter some text');
    }
  })
});
0 голосов
/ 03 августа 2011

Я разобрался в проблеме. У меня есть цикл while, и, очевидно, каждое имя btn и имя поля ввода должны быть уникальными, даже если они все в своих тегах.

$("#playerList").delegate('[id^="kick_btn"]', "click", function(event) {
  // get the current player number from the id of the clicked button
  var num = this.id.replace("kick_btn", "");
  var player_name = jQuery('input[name="player' + num + '"]').val();
  jQuery.get('testing.php?action=kick', {
      player_input: player_name
  });
  jQuery('input[name="player"]').attr('value','')
  alert('Successfully kicked ' + player_name + '.');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...