2012-03-04 7 views
0

Я работаю над сайтом пожертвований. На моей странице у меня есть текстовое поле, которое принимает числовое значение от пользователя (то есть деньги, которые нужно пожертвовать).Открыть новое окно/вкладка

В моем коде, у меня есть метод, который проверяет, является ли значение в текстовом поле числовым. Метод генерирует сообщение об ошибке, если номер недействителен.

У меня также есть JavaScript, который после проверки того, что значение в текстовом поле является числовым, открывает новую вкладку на странице подтверждения веб-сайта, благодаря пользователю за его пожертвование. Вот код JavaScript:

<script type="text/javascript"> 
     function Open_Window() 
     { 
      var textbox = document.getElementById('DonationTextBox'); 

      if (textbox.value != "") 
      { 
       if (isNan(textbox) == false) 
       { 
        window.open("DonationConfirmation.aspx") 
       } 
      } 
     } 
    </script> 

Проблема заключается в том, что вкладка НИКОГДА не открыт, даже если число является действительным. Не могли бы вы помочь мне решить эту проблему? Спасибо.

P.S.

Вот код кнопки, которая инициирует проверку:

<asp:ImageButton ID="PayPalButton2" runat="server" ImageAlign="Middle" 
             ImageUrl="Resources/Icons/PayPalCheckOut.gif" 
             onclick="PayPalButton2_Click" OnClientClick="Open_Window()"/> 

ответ

2
<script type="text/javascript"> 
    function Open_Window() 
    { 
     var textbox = document.getElementById('<%=DonationTextBox.ClientID%>');       
     if (textbox.value != "" && !isNaN(textbox.value)) {     
      window.open("DonationConfirmation.aspx"); 
     } 
    } 
</script> 

Редактировать
вместо IsNaN должен быть IsNaN (JavaScript является CaseSensitive)

+0

Я пробовал ваш код, но вкладка все еще не открывается. Я не могу понять, что не так, потому что код кажется правильным. – Matthew

+0

Я приду с обновлением (isNan на самом деле должно быть isNaN) –

+0

Спасибо. Я попытался изменить isNaN, но проблема все еще там. – Matthew

1

не должны эту линию ...

if (isNan(textbox) == false) 

быть это вместо того, чтобы ...

if (isNan(textbox.value) == false) 
+0

Я изменил строку, но проблема все еще сохраняется: s – Matthew

+0

Если я удалю код проверки из сценария и оторву от части window.open, он будет работать. Но по какой-то причине, когда я вводил эти две проверки, вкладка никогда не открывается. – Matthew

+0

вы можете попробовать поставить console.log («test»); или предупреждение («тест»); в начале вашей функции javascript, чтобы узнать, что-нибудь заходит в журнал или предупреждается? – timothyclifford

1

Здесь урезанная работает jsFiddle пример:

http://jsfiddle.net/pjgalbraith/QZeSF/

HTML-:

<a href="javascript:void(0)" id="PayPalButton2">Open</a> 
<textarea id="donationTextBox">1</textarea>​ 

И JS :

function openWindow() { 
    if($('#donationTextBox').val() && isNaN($('#donationTextBox').val()) === false) 
     window.open("http://www.google.com/", "mywindow"); 
} 

$(document).ready(function() { 
    $('#PayPalButton2').click(function(){ 
     openWindow(); 
    }); 
}); 

1

Во-первых, я бы рекомендовал явно разборе число, не полагаясь на неявном ToNumber операции, которая будет применяться при передаче строки в isNaN. Предположительно ваши пользователи ввода десятичной, так что если это означало быть целым числом (например, 10), использование:

var num = parseInt(textbox.value, 10); 

Если это означало быть числом с дробной компонент (например, 10,5), использование:

var num = parseFloat(textbox.value); 

Вы, вероятно, хотите parseFloat для стоимости валюты.

Тогда ваше if условие становится isNaN (обратите внимание, что окончательная N ограничен) на num:

<script type="text/javascript"> 
     function Open_Window() 
     { 
      var textbox = document.getElementById('DonationTextBox'); 
      var num = parseInt(textbox.value, 10); 

      if (!isNaN(num)) 
      { 
       window.open("DonationConfirmation.aspx") 
      } 
     } 
</script> 

И, наконец, вы уверены, что на стороне клиента идентификатор текстового поля на самом деле "DonationTextBox? ASP автоматически создает на стороне клиента идентификаторы, вам, возможно, придется использовать ClientID вместо этого, например .:

var textbox = document.getElementById('<%=DonationTextBox.ClientID%>'); 
3

Имя функции является isNaN. Примечание. Окончательный «N» - это капитал. Это должно решить вашу проблему.

Смежные вопросы