2009-02-12 4 views
2

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

Маленькое поле ввода - murl.

add() служит для отправки формы. если murl пуст, форма должна быть отправлена ​​напрямую, если ее не пусто, запись murl должна быть проверена в отношении базы данных, если она существует. если он не существует add().

Задача button должна быть нажата дважды, чтобы вызвать функцию.

код на кнопки:

<button type="button" value="My button value" onclick="javascript: niju();" name="microsubmit" id="microsubmit">button</button> 

JavaScript, который эта кнопка вызовов:

function niju() 
{ 
    var flag=1; 
    var micro=document.getElementById('murl').value; 

    $('#microsubmit').click(function() 
    { 

     if(micro=="") 
     { 
      add(); 
     } 
     else 
     { 
      //remove all the class add the messagebox classes and start fading 
      $("#msgbox") 
       .removeClass() 
       .addClass('messagebox') 
       .text('Checking...') 
       .fadeIn("slow"); 

      //check the username exists or not from ajax 
      $.post("<?php echo SITE_ROOT;?>inc/user_availability.php", 
       { murl: $("input:murl").val() }, 
       function(data) 
       { 
        if(data=='no') //if username not avaiable 
        { 
         $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox 
         { 
          //add message and change the class of the box and start fading 
          $(this) 
           .html('This User name Already exists') 
           .addClass('messageboxerror') 
           .fadeTo(900,1); 

          flag=0; 
         }); 
        } 
        else 
        { 
         $("#msgbox") 
          //start fading the messagebox 
          .fadeTo(200,0.1,function() 
          { 
           //add message and change the class of the box and start fading 
           $(this) 
            .html('Username available to register') 
            .addClass('messageboxok') 
            .fadeTo(900,1); 

           flag=1; 
           add(); 
          }); 
        } 
       }); 
     } 
    }); 

    if(micro=="" && flag==1) 
    { 
     add(); 
    } 
} 

Скриншот:

screenshot http://img294.imageshack.us/img294/2172/screenhunter001am9.th.jpg

+0

надежная работа, исправляющая редактирование полумесяца –

ответ

6

Она должна быть нажата дважды, потому что вы определяете #microsubmitclick Событие внутри функции. Поэтому при первом нажатии вы привязываете обработчик событий, а во второй раз обработчик событий находится на месте и уволен. Я не перешел к логике того, что вы пытаетесь выполнить, но я предполагаю, что если вы переместите связующее событие вне функции и убедитесь, что все ваши переменные находятся в правильных областях, тогда это сработает.

2

В первый раз, когда вы загружаете страницу, обработчик клика не подключен к кнопке, только до тех пор, пока вы не нажмете кнопку в первый раз, когда вы вызываете niju() и подключаете событие click. Вам нужно сделать что-то вроде

$(document).ready() { 
    niju(); 
} 

и удалить OnClick из кнопок декларации

0

Переместить свой флаг из функции Niju.

var flag=1; 
function niju() 
{ 
}